mirror of
https://github.com/modrinth/code.git
synced 2026-08-28 18:45:15 +00:00
Compare commits
109
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
157481cc9c | ||
|
|
552bc3f739 | ||
|
|
4758cabbf9 | ||
|
|
6ec979a076 | ||
|
|
c34bd26f87 | ||
|
|
2a43792fd9 | ||
|
|
2d567b93ce | ||
|
|
26e05ee9e5 | ||
|
|
ca8c5a717f | ||
|
|
759f67a551 | ||
|
|
66628fd69d | ||
|
|
1ffcd67562 | ||
|
|
fda5c62bc6 | ||
|
|
f8f05ce91b | ||
|
|
8b2438aebb | ||
|
|
07bac8ffde | ||
|
|
d0856d46f2 | ||
|
|
e8aee15664 | ||
|
|
98cb6b6b44 | ||
|
|
f27387462e | ||
|
|
ef90f08813 | ||
|
|
9fd45ef2ce | ||
|
|
92971a3e0d | ||
|
|
357224f22a | ||
|
|
e2612d1a33 | ||
|
|
318840e403 | ||
|
|
1a56233c96 | ||
|
|
ff8c4f16a9 | ||
|
|
757ec9ab53 | ||
|
|
f38d351d32 | ||
|
|
b78dd9bf1b | ||
|
|
5072c1d298 | ||
|
|
e4cbec6b2c | ||
|
|
5ef999bf8a | ||
|
|
b0394de164 | ||
|
|
9181c155e0 | ||
|
|
2e8aaa31be | ||
|
|
bca5303ae3 | ||
|
|
75335647ee | ||
|
|
a71a361e0f | ||
|
|
6ed044a54b | ||
|
|
3fa6905006 | ||
|
|
d344cbcb7a | ||
|
|
204f4da33f | ||
|
|
c57e88ecd4 | ||
|
|
feb3c3ee31 | ||
|
|
09f2af61dc | ||
|
|
61b52ecd2c | ||
|
|
9625740906 | ||
|
|
f234b7a0ac | ||
|
|
8aa22b9bed | ||
|
|
b8d97268cb | ||
|
|
c671ca52f6 | ||
|
|
a89711841d | ||
|
|
0038ea8b15 | ||
|
|
c0e6f094d9 | ||
|
|
1c574a1f2d | ||
|
|
bca8b1a02b | ||
|
|
5148e8ec35 | ||
|
|
cc53d9a6f8 | ||
|
|
474c6560fc | ||
|
|
f42a3bfde3 | ||
|
|
540b3269df | ||
|
|
36857a167b | ||
|
|
3487523f74 | ||
|
|
bb2193b6f5 | ||
|
|
6cfe999cb3 | ||
|
|
893ab49fdf | ||
|
|
fe0c97190a | ||
|
|
99377f8436 | ||
|
|
4c3abc62a8 | ||
|
|
af7336fffb | ||
|
|
cfea3aba34 | ||
|
|
6715a9c679 | ||
|
|
c3249ee51d | ||
|
|
2e43f6a42b | ||
|
|
779edf0333 | ||
|
|
ae13d37edc | ||
|
|
1e49d7da7a | ||
|
|
8b753a52ad | ||
|
|
a53c9c3771 | ||
|
|
919b235621 | ||
|
|
18b0b2848d | ||
|
|
65a3ac4b34 | ||
|
|
295db3fb7a | ||
|
|
7abe6f8c73 | ||
|
|
c5ce5bc9b3 | ||
|
|
572b8027ff | ||
|
|
0a53211389 | ||
|
|
22b2b7746e | ||
|
|
39b3e20d0a | ||
|
|
3892b62451 | ||
|
|
5ffffec2e5 | ||
|
|
a0724cc5fb | ||
|
|
a0320f425e | ||
|
|
06262e7bb1 | ||
|
|
9ccaab5fad | ||
|
|
39745086fa | ||
|
|
a8dcfa8a5d | ||
|
|
0f6a74b87f | ||
|
|
d5b763c8e3 | ||
|
|
7a98f45c3d | ||
|
|
0ea47ad7ef | ||
|
|
cc804625ec | ||
|
|
20235b7d32 | ||
|
|
920dc8dcbb | ||
|
|
30f64c0020 | ||
|
|
cfafa25ed4 | ||
|
|
7495b99ddd |
@@ -0,0 +1,23 @@
|
||||
---
|
||||
name: api-module
|
||||
description: Add an API endpoint module to packages/api-client from an OpenAPI schema. Use for new backend endpoints, API client modules, or tasks that provide an OpenAPI schema.
|
||||
---
|
||||
|
||||
# Add an API Module
|
||||
|
||||
Read the applicable `AGENTS.md` files before you edit code.
|
||||
|
||||
Read [the API module standard](../../../standards/frontend/ADDING_API_MODULES.md) in full.
|
||||
|
||||
1. Identify the OpenAPI schema from the request. If more than one schema is possible, ask the user to select one.
|
||||
2. Read the schema. Identify each endpoint, HTTP method, request type, response type, and path parameter.
|
||||
3. Get the service and version from the URL prefix. For example, map `/v3/projects` to `labrinth/v3/`.
|
||||
4. Define the API types in `types.ts`. Make each type match the schema exactly.
|
||||
5. Do not change, rename, or remove API fields.
|
||||
6. Make a module class that extends `AbstractModule`. Implement each endpoint with `this.client.request()` or `this.client.upload()`.
|
||||
7. Use the request-option pattern from the standard. Do not call `$fetch`, `fetch`, or another HTTP client directly.
|
||||
8. Add the module to `MODULE_REGISTRY` so the client can instantiate it.
|
||||
9. Export new service types from the applicable barrel `index.ts`.
|
||||
10. Check the module paths, registry key, public type exports, and endpoint types.
|
||||
|
||||
Run only the checks that the user or the applicable `AGENTS.md` permits.
|
||||
@@ -0,0 +1,4 @@
|
||||
interface:
|
||||
display_name: "Add API Module"
|
||||
short_description: "Add typed API client modules from OpenAPI"
|
||||
default_prompt: "Use $api-module to add an API client module from this OpenAPI schema."
|
||||
@@ -0,0 +1,38 @@
|
||||
---
|
||||
name: cross-platform-pages
|
||||
description: Convert a page to the shared Modrinth page system for the website and desktop app. Use for shared layouts, wrapped layouts, or platform dependency-injection contracts.
|
||||
---
|
||||
|
||||
# Convert a Cross-Platform Page
|
||||
|
||||
Read the applicable `AGENTS.md` files before you edit code.
|
||||
|
||||
Read these standards in full:
|
||||
|
||||
- [Cross-platform pages](../../../standards/frontend/CROSS_PLATFORM_PAGES.md)
|
||||
- [Dependency injection](../../../standards/frontend/DEPENDENCY_INJECTION.md)
|
||||
|
||||
1. Identify the target page from the request.
|
||||
2. Read the page and its route shell. Identify data sources, mutations, navigation, and platform APIs.
|
||||
3. Use a wrapped layout when both platforms use the same API source and page logic.
|
||||
4. Use a shared layout when platform data or operations have different implementations.
|
||||
|
||||
For a shared layout:
|
||||
|
||||
1. Define a provider contract for all platform operations.
|
||||
2. Put common UI and state logic in the shared layout.
|
||||
3. Put reusable search, filter, and selection logic in local composables.
|
||||
4. Implement the contract in `apps/frontend/` and `apps/app-frontend/`.
|
||||
5. Use optional contract fields only for capabilities that are not available on both platforms.
|
||||
|
||||
For a wrapped layout:
|
||||
|
||||
1. Move the page to `packages/ui/src/layouts/wrapped/` and preserve its route structure.
|
||||
2. Replace platform-only imports with common utilities or provider calls.
|
||||
3. Make each frontend route shell render the wrapped component.
|
||||
4. Match primary query options in both route shells when the layout uses `ReadyTransition` and `useReadyState`.
|
||||
5. Prefetch these queries with `ensureQueryData`, as the standard specifies.
|
||||
|
||||
Check that both route shells resolve their imports. Check that all required provider fields have implementations.
|
||||
|
||||
Run only the checks that the user or the applicable `AGENTS.md` permits.
|
||||
@@ -0,0 +1,4 @@
|
||||
interface:
|
||||
display_name: "Convert Cross-Platform Page"
|
||||
short_description: "Share pages across the web and desktop app"
|
||||
default_prompt: "Use $cross-platform-pages to convert this page for the website and desktop app."
|
||||
@@ -0,0 +1,21 @@
|
||||
---
|
||||
name: figma-mcp
|
||||
description: Convert a Figma design into a Modrinth Vue page or component. Use when a request provides a Figma URL or asks to implement a Figma layout.
|
||||
---
|
||||
|
||||
# Implement a Figma Design
|
||||
|
||||
Read the applicable `AGENTS.md` files before you edit code.
|
||||
|
||||
Read `packages/ui/AGENTS.md` in full.
|
||||
|
||||
1. Load the available Figma design-to-code instructions and follow the MCP tool guidance.
|
||||
2. Call `get_design_context` first with `clientLanguages: "typescript,html,css"` and `clientFrameworks: "vue"`.
|
||||
3. Treat the result as reference code and adapt it to the Modrinth codebase.
|
||||
4. Map Figma color variables to the applicable `surface-*` and `text-*` tokens. Do not use aliased Figma names directly.
|
||||
5. Reuse applicable components from `packages/ui/src/components/` before creating new ones. Also refer to `standards/frontend/COMPONENT_STRUCTURE.md`
|
||||
6. Read `packages/assets/styles/variables.scss` when Figma does not supply a required token.
|
||||
7. Use exact spacing values from the design.
|
||||
8. Implement the result as a Vue SFC with Tailwind classes and the existing component library.
|
||||
|
||||
Run only the checks that the user or the applicable `AGENTS.md` permits.
|
||||
@@ -0,0 +1,4 @@
|
||||
interface:
|
||||
display_name: "Implement Figma Design"
|
||||
short_description: "Build Modrinth Vue UI from Figma designs"
|
||||
default_prompt: "Use $figma-mcp to implement this Figma design as a Modrinth Vue component."
|
||||
@@ -0,0 +1,32 @@
|
||||
---
|
||||
name: i18n-pass
|
||||
description: Convert hard-coded English text in changed Vue components to the @modrinth/ui localization system. Use for an i18n pass, untranslated-string review, pull request, or component migration.
|
||||
---
|
||||
|
||||
# Do an Internationalization Pass
|
||||
|
||||
Read the applicable `AGENTS.md` files before you edit code.
|
||||
|
||||
Read [the internationalization standard](../../../standards/frontend/INTERNATIONALIZATION.md) in full.
|
||||
|
||||
1. Identify the scope from the request.
|
||||
2. For a pull request, use `gh pr diff <number>` to identify changed files.
|
||||
3. For a file path, inspect that file.
|
||||
4. When the request gives no scope, inspect the current uncommitted diff.
|
||||
5. Limit the pass to changed `.vue` files.
|
||||
6. Find user-visible text in templates and scripts.
|
||||
|
||||
Check inner text, `alt`, `placeholder`, `aria-label`, buttons, tooltips, notifications, dropdown labels, and error messages.
|
||||
|
||||
Do not change dynamic expressions, HTML tag names, CSS classes, internal identifiers, or log messages.
|
||||
|
||||
1. Define stable message IDs with `defineMessage` or `defineMessages`.
|
||||
2. Replace simple text with `formatMessage()` calls.
|
||||
3. Use `<IntlFormatted>` for text that contains links or markup.
|
||||
4. Use ICU selections and plurals when grammar depends on a value.
|
||||
5. Add a space before `}}` when an ICU placeholder ends at the Vue delimiter.
|
||||
6. Do not change component logic, layout, or reactivity.
|
||||
7. Do not edit localization JSON files. The user maintains those files.
|
||||
8. Check the changed templates again for hard-coded English text.
|
||||
|
||||
Run only the checks that the user or the applicable `AGENTS.md` permits.
|
||||
@@ -0,0 +1,4 @@
|
||||
interface:
|
||||
display_name: "Run Internationalization Pass"
|
||||
short_description: "Localize user-visible text in Vue files"
|
||||
default_prompt: "Use $i18n-pass to localize the user-visible text in these changed Vue files."
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
name: review-changelog
|
||||
description: Review the latest packages/blog/changelog.ts entry against the Modrinth changelog standard. Use before a pull request or when asked to review or lint a changelog entry.
|
||||
---
|
||||
|
||||
# Review a Changelog Entry
|
||||
|
||||
Read [the changelog standard](../../../standards/maintaining/CHANGELOG.md) in full before the review.
|
||||
|
||||
1. Open `packages/blog/changelog.ts`.
|
||||
2. Find the first entry in the `VERSIONS` array.
|
||||
3. If the request names `web`, `hosting`, or `app`, review the latest entry for that product.
|
||||
4. Otherwise, review the latest entry and all adjacent entries with the same date.
|
||||
|
||||
Check the entry structure:
|
||||
|
||||
- `date` contains a valid ISO 8601 timestamp.
|
||||
- `product` is `web`, `hosting`, or `app`.
|
||||
- An `app` entry has a `version` value.
|
||||
- A `web` or `hosting` entry does not have a `version` value.
|
||||
- Standard headings are `## Added`, `## Changed`, `## Fixed`, and `## Security`.
|
||||
- A featured release can use a linked heading.
|
||||
- Flag the legacy `## Improvements` heading.
|
||||
|
||||
Check each bullet:
|
||||
|
||||
- The voice and tense agree with the section.
|
||||
- The first verb agrees with the section.
|
||||
- The bullet describes user-visible behavior, not implementation.
|
||||
- The bullet identifies the applicable page, tab, modal, or feature.
|
||||
- The bullet contains one sentence, uses sentence case, and ends with a period.
|
||||
- Product and UI names use the public labels.
|
||||
- The bullet does not contain filler, vague intensifiers, apologies, or internal references.
|
||||
- The bullet is not a duplicate detail of a larger listed change.
|
||||
|
||||
Group findings by entry. For each finding, show the original bullet and a proposed replacement.
|
||||
|
||||
If the entry has no findings, state this result. Do not edit the changelog unless the user asks you to apply fixes.
|
||||
|
||||
When the user asks for fixes, preserve tab indentation and template-literal formatting.
|
||||
@@ -0,0 +1,4 @@
|
||||
interface:
|
||||
display_name: "Review Changelog"
|
||||
short_description: "Review changelog entries for style problems"
|
||||
default_prompt: "Use $review-changelog to review the latest changelog entry."
|
||||
@@ -0,0 +1,39 @@
|
||||
---
|
||||
name: tanstack-query
|
||||
description: Convert Vue server-state code to TanStack Query. Use for useQuery, useMutation, cache invalidation, optimistic updates, or replacement of useAsyncData and manual ref patterns.
|
||||
---
|
||||
|
||||
# Convert Data Code to TanStack Query
|
||||
|
||||
Read the applicable `AGENTS.md` files before you edit code.
|
||||
|
||||
Read [the TanStack Query standard](../../../standards/frontend/FETCHING_DATA.md) in full.
|
||||
|
||||
1. Identify the target file from the request.
|
||||
2. Find `useAsyncData`, `useFetch`, manual API refs, and fetch calls in `onMounted`.
|
||||
3. Identify mutations that use manual loading, error, or result refs.
|
||||
|
||||
For queries:
|
||||
|
||||
1. Replace manual fetch logic with `useQuery`.
|
||||
2. Get `api-client` with `injectModrinthClient()`.
|
||||
3. Use a hierarchical query key with the resource, qualifier, and parameters.
|
||||
4. Use a computed query key for reactive parameters.
|
||||
5. Use a computed `enabled` option when the query depends on other data.
|
||||
6. Use a shared query-option factory when multiple components use the query.
|
||||
|
||||
For mutations:
|
||||
|
||||
1. Replace manual mutation state with `useMutation`.
|
||||
2. Invalidate or update related query data after success.
|
||||
3. Use an optimistic update only when the UI needs an immediate response.
|
||||
4. Cancel the applicable query and save its prior data before an optimistic update.
|
||||
5. Restore the prior data after an error. Invalidate the query after settlement.
|
||||
|
||||
Remove manual loading and error refs that TanStack Query replaces. Remove obsolete `onMounted` fetch calls.
|
||||
|
||||
Keep Nuxt SSR behavior. Match route-shell prefetch options when `ReadyTransition` and `useReadyState` depend on the query.
|
||||
|
||||
Check query keys, invalidation prefixes, reactive values, and rollback data.
|
||||
|
||||
Run only the checks that the user or the applicable `AGENTS.md` permits.
|
||||
@@ -0,0 +1,4 @@
|
||||
interface:
|
||||
display_name: "Migrate to TanStack Query"
|
||||
short_description: "Migrate Vue server state to TanStack Query"
|
||||
default_prompt: "Use $tanstack-query to migrate this Vue component to TanStack Query."
|
||||
@@ -1,18 +0,0 @@
|
||||
---
|
||||
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>
|
||||
---
|
||||
|
||||
Refer to the standard: @standards/frontend/ADDING_API_MODULES.md
|
||||
|
||||
## Steps
|
||||
|
||||
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,26 +0,0 @@
|
||||
---
|
||||
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>
|
||||
---
|
||||
|
||||
Refer to the standards: @standards/frontend/CROSS_PLATFORM_PAGES.md and @standards/frontend/DEPENDENCY_INJECTION.md
|
||||
|
||||
## Steps
|
||||
|
||||
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.
|
||||
- If the layout uses TanStack Query for initial route paint with `ReadyTransition` / `useReadyState`, each platform route shell must call `ensureQueryData` for those queries with matching keys and fetchers — see **Platform route shells: prefetch with `ensureQueryData`** in `standards/frontend/CROSS_PLATFORM_PAGES.md`.
|
||||
6. **Verify** the page renders correctly by checking for missing imports and that all DI contracts are satisfied.
|
||||
@@ -1,22 +0,0 @@
|
||||
---
|
||||
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>
|
||||
---
|
||||
|
||||
Refer to the standard: @standards/frontend/FIGMA_MCP_USAGE.md
|
||||
Also read @packages/ui/CLAUDE.md for color token mapping and component conventions.
|
||||
|
||||
## Steps
|
||||
|
||||
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,24 +0,0 @@
|
||||
---
|
||||
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,36 +0,0 @@
|
||||
---
|
||||
name: review-changelog
|
||||
description: Review the latest changelog entry in packages/blog/changelog.ts against the project's changelog style guide and flag bullets that need rewriting. Use when checking a freshly added changelog entry before opening a PR, or when the user asks to review/lint the latest changelog.
|
||||
argument-hint: [product?]
|
||||
---
|
||||
|
||||
Refer to the standard: @standards/maintaining/CHANGELOG.md
|
||||
|
||||
## Steps
|
||||
|
||||
1. **Locate the latest entry:**
|
||||
- Open `packages/blog/changelog.ts`.
|
||||
- The latest entries are at the top of the `VERSIONS` array.
|
||||
- If `$ARGUMENTS` specifies a product (`web`, `hosting`, `app`), review the most recent entry for that product. Otherwise, review the most recent entry overall, plus any sibling entries sharing the same `date` (coordinated releases ship together).
|
||||
|
||||
2. **Read the standard above** in full before reviewing. The bullet rules, section/verb agreement, and "Don't" list are the source of truth.
|
||||
|
||||
3. **Check the entry shell:**
|
||||
- `date` is a valid ISO 8601 timestamp.
|
||||
- `product` is one of `web`, `hosting`, `app`.
|
||||
- `version` is present for `app` entries and omitted for `web`/`hosting`.
|
||||
- Section headings use `## Added`, `## Changed`, `## Fixed`, `## Security` (or a featured-release linked heading). Flag legacy `## Improvements`.
|
||||
|
||||
4. **Review each bullet** against the standard. For each bullet, check:
|
||||
- Voice/tense matches the section heading.
|
||||
- Opening verb agrees with its section.
|
||||
- Describes observable behavior, not implementation.
|
||||
- Specific enough to identify the surface (names the tab/page/modal).
|
||||
- One sentence, ends with a period, sentence case.
|
||||
- Uses branded names (Modrinth App, Modrinth Hosting) correctly.
|
||||
- No filler ("issue with", "issue where", "various", "some"), no vague intensifiers, no apologies, no PR/commit references (unless crediting a third-party contributor with a linked GitHub profile).
|
||||
- Not a duplicate sub-fix of a bigger change already listed.
|
||||
|
||||
5. **Report findings** as a short list grouped by entry. For each problem bullet, show the original line and a suggested rewrite. If the entry is clean, say so explicitly. Do not edit the file unless the user asks - this skill is a review pass, not a rewrite pass.
|
||||
|
||||
6. **If the user then asks to apply fixes**, edit `packages/blog/changelog.ts` directly using the suggested rewrites. Preserve tab indentation and template literal formatting.
|
||||
@@ -1,27 +0,0 @@
|
||||
---
|
||||
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>
|
||||
---
|
||||
|
||||
Refer to the standard: @standards/frontend/FETCHING_DATA.md
|
||||
|
||||
## Steps
|
||||
|
||||
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.
|
||||
@@ -34,13 +34,13 @@ runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Extract PR Number and Commit ID
|
||||
id: extract-pr-info
|
||||
uses: actions/github-script@v7
|
||||
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0
|
||||
with:
|
||||
script: |
|
||||
const githubRef = process.env.GITHUB_REF;
|
||||
@@ -90,20 +90,26 @@ runs:
|
||||
- name: Print PR Branch
|
||||
if: env.CAN_SKIP_CHECKS != 'false'
|
||||
shell: bash
|
||||
env:
|
||||
PR_BRANCH: ${{ steps.get-pr-branch.outputs.prBranch }}
|
||||
run: |
|
||||
echo "PR Branch: ${{ steps.get-pr-branch.outputs.prBranch }}"
|
||||
echo "PR Branch: $PR_BRANCH"
|
||||
|
||||
- name: Check if PR branch contains the Merge Queue target commit ID
|
||||
if: env.CAN_SKIP_CHECKS != 'false'
|
||||
shell: bash
|
||||
env:
|
||||
PR_BRANCH: ${{ steps.get-pr-branch.outputs.prBranch }}
|
||||
COMMIT_ID: ${{ steps.extract-pr-info.outputs.commitId }}
|
||||
TARGET_BRANCH: ${{ steps.extract-pr-info.outputs.targetBranchName }}
|
||||
run: |
|
||||
# Get the branch name from previous steps
|
||||
branch_name="origin/${{ steps.get-pr-branch.outputs.prBranch }}"
|
||||
commit_id="${{ steps.extract-pr-info.outputs.commitId }}"
|
||||
branch_name="origin/$PR_BRANCH"
|
||||
commit_id="$COMMIT_ID"
|
||||
|
||||
# Check if the branch history contains the commit
|
||||
if git branch -r --contains "$commit_id" | grep -q "$branch_name"; then
|
||||
echo "Branch '$branch_name' contains commit '$commit_id'. It is up to date with ${{ steps.extract-pr-info.outputs.targetBranchName }}."
|
||||
if git branch -r --contains "$commit_id" | grep -qF "$branch_name"; then
|
||||
echo "Branch '$branch_name' contains commit '$commit_id'. It is up to date with $TARGET_BRANCH."
|
||||
else
|
||||
echo "Branch '$branch_name' does not contain commit '$commit_id'. It is outdated. Setting CAN_SKIP_CHECKS to false."
|
||||
echo "CAN_SKIP_CHECKS=false" >> "$GITHUB_ENV"
|
||||
@@ -112,8 +118,10 @@ runs:
|
||||
- name: Compare PR Branch with Current Branch
|
||||
if: env.CAN_SKIP_CHECKS != 'false'
|
||||
shell: bash
|
||||
env:
|
||||
PR_BRANCH: ${{ steps.get-pr-branch.outputs.prBranch }}
|
||||
run: |
|
||||
if git diff --quiet "origin/${{ steps.get-pr-branch.outputs.prBranch }}"; then
|
||||
if git diff --quiet "origin/$PR_BRANCH"; then
|
||||
echo "No differences found. PR branch is identical with this merge queue branch."
|
||||
else
|
||||
echo "Differences detected. PR branch has been updated after PR was added to merge queue. Setting CAN_SKIP_CHECKS to false."
|
||||
@@ -122,9 +130,11 @@ runs:
|
||||
|
||||
- name: Compute/publish skip result
|
||||
id: passed-checks
|
||||
uses: actions/github-script@v7
|
||||
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7.1.0
|
||||
env:
|
||||
SECRET: ${{ inputs.secret }}
|
||||
PR_BRANCH: ${{ steps.get-pr-branch.outputs.prBranch }}
|
||||
TARGET_BRANCH: ${{ steps.extract-pr-info.outputs.targetBranchName }}
|
||||
with:
|
||||
github-token: ${{ inputs.secret != '' && inputs.secret || github.token }}
|
||||
script: |
|
||||
@@ -144,7 +154,7 @@ runs:
|
||||
const { data: branchProtection } = await github.rest.repos.getBranchProtection({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
branch: "${{ steps.extract-pr-info.outputs.targetBranchName }}",
|
||||
branch: process.env.TARGET_BRANCH,
|
||||
});
|
||||
const requiredCheckNames = branchProtection.required_status_checks.contexts;
|
||||
console.log(`requiredCheckNames = ${requiredCheckNames}`);
|
||||
@@ -152,7 +162,7 @@ runs:
|
||||
const { data: checks } = await github.rest.checks.listForRef({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
ref: "refs/heads/${{ steps.get-pr-branch.outputs.prBranch }}",
|
||||
ref: `refs/heads/${process.env.PR_BRANCH}`,
|
||||
});
|
||||
|
||||
console.log(`checks.check_runs = ${checks.check_runs.map(check => `${check.status},${check.conclusion},${check.name};`)}`);
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
name: Deploy Command
|
||||
run-name: Deploy PR #${{ github.event.client_payload.github.payload.issue.number }}
|
||||
|
||||
on:
|
||||
repository_dispatch:
|
||||
types: [deploy-command]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
actions: read
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
if: ${{ github.event.client_payload.pull_request.head.repo.full_name == github.repository }}
|
||||
uses: SparkUniverse/workflows/.github/workflows/deploy-command.yaml@main
|
||||
secrets:
|
||||
ARGOCD_DEPLOY_KEY: ${{ secrets.ARGOCD_DEPLOY_KEY }}
|
||||
CMD_DISPATCH_GH_TOKEN: ${{ secrets.SLASH_CMD_GH_TOKEN }}
|
||||
with:
|
||||
application-set: labrinth
|
||||
build-workflow: labrinth-build.yml
|
||||
branch: ${{ github.event.client_payload.pull_request.head.ref }}
|
||||
issue-number: ${{ github.event.client_payload.github.payload.issue.number }}
|
||||
head-sha: ${{ github.event.client_payload.pull_request.head.sha }}
|
||||
@@ -1,19 +1,26 @@
|
||||
name: docker-build
|
||||
name: Labrinth Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'main'
|
||||
- 'prod'
|
||||
paths:
|
||||
- .github/workflows/labrinth-docker.yml
|
||||
- .github/workflows/labrinth-build.yml
|
||||
- 'apps/labrinth/**'
|
||||
- 'packages/**'
|
||||
- '!packages/api-client/**'
|
||||
- '!packages/app-lib/**'
|
||||
- Cargo.toml
|
||||
- Cargo.lock
|
||||
pull_request:
|
||||
types: [opened, synchronize]
|
||||
paths:
|
||||
- .github/workflows/labrinth-docker.yml
|
||||
- .github/workflows/labrinth-build.yml
|
||||
- 'apps/labrinth/**'
|
||||
- 'packages/**'
|
||||
- '!packages/api-client/**'
|
||||
- '!packages/app-lib/**'
|
||||
- Cargo.toml
|
||||
- Cargo.lock
|
||||
merge_group:
|
||||
@@ -69,7 +76,8 @@ jobs:
|
||||
echo "skip=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
docker:
|
||||
build:
|
||||
name: Build Labrinth
|
||||
runs-on: ${{ needs.skip-if-clean.outputs.internal == 'true' && 'namespace-profile-modrinth-labrinth' || 'ubuntu-latest' }}
|
||||
needs: [skip-if-clean]
|
||||
if: ${{ needs.skip-if-clean.outputs.skip != 'true' }}
|
||||
@@ -120,42 +128,30 @@ jobs:
|
||||
cp -r apps/labrinth/migrations apps/labrinth/docker-stage/migrations
|
||||
cp -r apps/labrinth/assets apps/labrinth/docker-stage/assets
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@bb05f3f5519dd87d3ba754cc423b652a5edd6d2c # v4.2.0
|
||||
|
||||
- name: Generate Docker image metadata
|
||||
id: docker-meta
|
||||
uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6.2.0
|
||||
env:
|
||||
# GitHub Packages requires annotations metadata in at least the index descriptor to show them
|
||||
# up properly in its UI it seems, but it's not clear about it, because the docs refer to the
|
||||
# image manifest only. See:
|
||||
# https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#adding-a-description-to-multi-arch-images
|
||||
DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index
|
||||
- name: Upload Docker context
|
||||
if: needs.skip-if-clean.outputs.internal == 'true'
|
||||
uses: namespace-actions/upload-artifact@f6ccaacc655aec41b93af180d1d7eef21af862d2 # v1.0.3
|
||||
with:
|
||||
images: ghcr.io/modrinth/labrinth
|
||||
labels: |
|
||||
org.opencontainers.image.title=labrinth
|
||||
org.opencontainers.image.description=Modrinth API
|
||||
org.opencontainers.image.licenses=AGPL-3.0-only
|
||||
annotations: |
|
||||
org.opencontainers.image.title=labrinth
|
||||
org.opencontainers.image.description=Modrinth API
|
||||
org.opencontainers.image.licenses=AGPL-3.0-only
|
||||
name: labrinth-docker-context
|
||||
retention-days: 1
|
||||
path: apps/labrinth/docker-stage
|
||||
|
||||
- name: Login to GitHub Packages
|
||||
uses: docker/login-action@abd2ef45e78c5afb21d64d4ca52ee8550d9572c7 # v4.5.1
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
docker-build:
|
||||
needs: [skip-if-clean, build]
|
||||
if: ${{ needs.skip-if-clean.outputs.internal == 'true' }}
|
||||
uses: SparkUniverse/workflows/.github/workflows/docker-build.yaml@main
|
||||
with:
|
||||
image-name: labrinth
|
||||
dockerfile-path: apps/labrinth/Dockerfile
|
||||
artifacts-name: labrinth-docker-context
|
||||
|
||||
- name: Build and push
|
||||
uses: docker/build-push-action@53b7df96c91f9c12dcc8a07bcb9ccacbed38856a # v7.3.0
|
||||
with:
|
||||
context: ./apps/labrinth/docker-stage
|
||||
file: ./apps/labrinth/Dockerfile
|
||||
push: true
|
||||
tags: ${{ steps.docker-meta.outputs.tags }}
|
||||
labels: ${{ steps.docker-meta.outputs.labels }}
|
||||
annotations: ${{ steps.docker-meta.outputs.annotations }}
|
||||
deploy:
|
||||
needs: [skip-if-clean, docker-build]
|
||||
if: ${{ needs.skip-if-clean.outputs.internal == 'true' && github.ref == 'refs/heads/prod' }}
|
||||
uses: SparkUniverse/workflows/.github/workflows/argo-update.yaml@main
|
||||
secrets:
|
||||
ARGOCD_DEPLOY_KEY: ${{ secrets.ARGOCD_DEPLOY_KEY }}
|
||||
with:
|
||||
application-set: labrinth
|
||||
branch: ${{ github.ref == 'refs/heads/prod' && 'main' || 'develop' }}
|
||||
environment-name: ${{ github.ref == 'refs/heads/prod' && 'production' || 'staging' }}
|
||||
@@ -0,0 +1,20 @@
|
||||
name: Slash Command Dispatch
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
|
||||
permissions: {}
|
||||
|
||||
jobs:
|
||||
dispatch-command:
|
||||
if: ${{ github.event.sender.type == 'User' && contains(fromJSON('["OWNER", "MEMBER"]'), github.event.comment.author_association) }}
|
||||
runs-on: namespace-profile-tiny-arm64
|
||||
steps:
|
||||
- name: Slash Command Dispatch
|
||||
uses: peter-evans/slash-command-dispatch@9bdcd7914ec1b75590b790b844aa3b8eee7c683a # v5.0.2
|
||||
with:
|
||||
token: ${{ secrets.SLASH_CMD_GH_TOKEN }}
|
||||
issue-type: pull-request
|
||||
commands: |
|
||||
deploy
|
||||
@@ -92,7 +92,6 @@ jobs:
|
||||
run: corepack enable
|
||||
|
||||
- name: Set up caches
|
||||
if: contains(matrix.artifact-target-name, 'linux') || contains(matrix.artifact-target-name, 'darwin')
|
||||
uses: namespacelabs/nscloud-cache-action@c5f8dab7560444c4bf8dbc64f1b203431873c547 # v1.6.1
|
||||
with:
|
||||
cache: |
|
||||
@@ -100,7 +99,6 @@ jobs:
|
||||
pnpm
|
||||
|
||||
- name: Configure sccache
|
||||
if: contains(matrix.artifact-target-name, 'linux') || contains(matrix.artifact-target-name, 'darwin')
|
||||
run: nsc cache sccache setup --cache_name default >> "$GITHUB_ENV"
|
||||
|
||||
- name: Generate tauri-dev.conf.json
|
||||
|
||||
+1
-2
@@ -65,8 +65,7 @@ generated
|
||||
app-playground-data/*
|
||||
|
||||
.astro
|
||||
.claude/*
|
||||
!.claude/skills/
|
||||
.claude/
|
||||
.letta
|
||||
|
||||
# labrinth demo fixtures
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
merge_queue:
|
||||
mode: parallel
|
||||
scopes:
|
||||
source:
|
||||
files:
|
||||
frontend:
|
||||
include:
|
||||
- apps/frontend/**/*
|
||||
- packages/ui/**/*
|
||||
- packages/utils/**/*
|
||||
- packages/assets/**/*
|
||||
- "**/wrangler.jsonc"
|
||||
- "**/pnpm-*.yaml"
|
||||
backend:
|
||||
include:
|
||||
- apps/labrinth/**
|
||||
- Cargo.toml
|
||||
app:
|
||||
include:
|
||||
- apps/app/**
|
||||
- apps/app-frontend/**
|
||||
- packages/app-lib/**
|
||||
- packages/app-macros/**
|
||||
@@ -0,0 +1,93 @@
|
||||
# Modrinth Monorepo
|
||||
|
||||
This is the Modrinth monorepo — it contains all Modrinth projects, both frontend and backend. When entering a project, either to edit or analyse, you should read its AGENTS.md.
|
||||
|
||||
## Architecture
|
||||
|
||||
- **Monorepo tooling:** [Turborepo](https://turbo.build/) (`turbo.jsonc`) + [pnpm workspaces](https://pnpm.io/workspaces) (`pnpm-workspace.yaml`)
|
||||
- **Frontend:** Vue 3 / Nuxt 3, Tailwind CSS v3
|
||||
- **Backend:** Rust (Labrinth API), Postgres, Clickhouse
|
||||
- **Indentation:** Use TAB everywhere, never spaces
|
||||
|
||||
### Apps (`apps/`)
|
||||
|
||||
| App | Description |
|
||||
| ----------------- | ------------------------------ |
|
||||
| `frontend` | Main Modrinth website (Nuxt 3) |
|
||||
| `app-frontend` | Desktop/app frontend (Vue 3) |
|
||||
| `app` | Desktop/app shell (Tauri) |
|
||||
| `app-playground` | Testing playground for app |
|
||||
| `labrinth` | Backend API service |
|
||||
| `daedalus_client` | Daedalus client implementation |
|
||||
| `docs` | Documentation site (Astro) |
|
||||
|
||||
### Packages (`packages/`)
|
||||
|
||||
| Package | Description |
|
||||
| ------------------ | ----------------------------------------------------- |
|
||||
| `ui` | Shared Vue component library (`@modrinth/ui`) |
|
||||
| `assets` | Styling and auto-generated icons (`@modrinth/assets`) |
|
||||
| `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 (mostly deprecated) |
|
||||
| `moderation` | Moderation utilities |
|
||||
| `daedalus` | Daedalus protocol |
|
||||
| `tooling-config` | ESLint, Prettier, TypeScript configs |
|
||||
| `ariadne` | Analytics library |
|
||||
| `modrinth-log` | Logging utilities |
|
||||
| `modrinth-maxmind` | MaxMind GeoIP |
|
||||
| `modrinth-util` | General utilities |
|
||||
| `muralpay` | Payment processing |
|
||||
| `path-util` | Path utilities |
|
||||
| `sqlx-tracing` | SQLx query tracing |
|
||||
|
||||
## Pre-PR Commands
|
||||
|
||||
Run these from the **root** folder before opening a pull request - do not run these after each prompt the user gives you, only run when asked, ask the user a question if they want to run it if the user indicates that they are about to create a pull request.
|
||||
|
||||
- **Website:** `pnpm prepr:frontend:web`
|
||||
- **App frontend:** `pnpm prepr:frontend:app`
|
||||
- **Frontend libs:** `pnpm prepr:frontend:lib`
|
||||
- **All frontend (app+web):** `pnpm prepr`
|
||||
- **Labrinth (backend):** See `apps/labrinth/AGENTS.md`
|
||||
|
||||
The website and app `prepr` commands
|
||||
|
||||
## Dev Commands
|
||||
|
||||
- **Website:** `pnpm web:dev` (copy `.env` template in `apps/frontend/` first)
|
||||
- **App:** `pnpm app:dev` (copy `.env` template in `packages/app-lib/` first)
|
||||
- **Storybook (packages/ui):** `pnpm storybook`
|
||||
|
||||
## Project-Specific Instructions
|
||||
|
||||
Each project may have its own file with detailed instructions:
|
||||
|
||||
- [`apps/labrinth/AGENTS.md`](apps/labrinth/AGENTS.md) — Backend API
|
||||
- [`apps/frontend/AGENTS.md`](apps/frontend/AGENTS.md) - Frontend Website
|
||||
|
||||
## Code Guidelines
|
||||
|
||||
### Comments
|
||||
- DO NOT use "heading" comments like: `=== Helper methods ===`.
|
||||
- Use doc comments, but avoid inline comments unless ABSOLUTELY necessary for clarity. Code should aim to be self documenting!
|
||||
|
||||
## Bash Guidelines
|
||||
|
||||
### Output handling
|
||||
- DO NOT pipe output through `head`, `tail`, `less`, or `more`
|
||||
- NEVER use `| head -n X` or `| tail -n X` to truncate output
|
||||
- IMPORTANT: Run commands directly without pipes when possible
|
||||
- IMPORTANT: If you need to limit output, use command-specific flags (e.g. `git log -n 10` instead of `git log | head -10`)
|
||||
- ALWAYS read the full output — never pipe through filters
|
||||
|
||||
### 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.
|
||||
|
||||
## Standards
|
||||
|
||||
Standards available at the @standards/ folder.
|
||||
@@ -1,110 +0,0 @@
|
||||
# Modrinth Monorepo
|
||||
|
||||
This is the Modrinth monorepo — it contains all Modrinth projects, both frontend and backend. When entering a project, either to edit or analyse, you should read it's CLAUDE.md.
|
||||
|
||||
## Architecture
|
||||
|
||||
- **Monorepo tooling:** [Turborepo](https://turbo.build/) (`turbo.jsonc`) + [pnpm workspaces](https://pnpm.io/workspaces) (`pnpm-workspace.yaml`)
|
||||
- **Frontend:** Vue 3 / Nuxt 3, Tailwind CSS v3
|
||||
- **Backend:** Rust (Labrinth API), Postgres, Clickhouse
|
||||
- **Indentation:** Use TAB everywhere, never spaces
|
||||
|
||||
### Apps (`apps/`)
|
||||
|
||||
| App | Description |
|
||||
| ----------------- | ------------------------------ |
|
||||
| `frontend` | Main Modrinth website (Nuxt 3) |
|
||||
| `app-frontend` | Desktop/app frontend (Vue 3) |
|
||||
| `app` | Desktop/app shell (Tauri) |
|
||||
| `app-playground` | Testing playground for app |
|
||||
| `labrinth` | Backend API service |
|
||||
| `daedalus_client` | Daedalus client implementation |
|
||||
| `docs` | Documentation site (Astro) |
|
||||
|
||||
### Packages (`packages/`)
|
||||
|
||||
| Package | Description |
|
||||
| ------------------ | ----------------------------------------------------- |
|
||||
| `ui` | Shared Vue component library (`@modrinth/ui`) |
|
||||
| `assets` | Styling and auto-generated icons (`@modrinth/assets`) |
|
||||
| `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 (mostly deprecated) |
|
||||
| `moderation` | Moderation utilities |
|
||||
| `daedalus` | Daedalus protocol |
|
||||
| `tooling-config` | ESLint, Prettier, TypeScript configs |
|
||||
| `ariadne` | Analytics library |
|
||||
| `modrinth-log` | Logging utilities |
|
||||
| `modrinth-maxmind` | MaxMind GeoIP |
|
||||
| `modrinth-util` | General utilities |
|
||||
| `muralpay` | Payment processing |
|
||||
| `path-util` | Path utilities |
|
||||
| `sqlx-tracing` | SQLx query tracing |
|
||||
|
||||
## Pre-PR Commands
|
||||
|
||||
Run these from the **root** folder before opening a pull request - do not run these after each prompt the user gives you, only run when asked, ask the user a question if they want to run it if the user indicates that they are about to create a pull request.
|
||||
|
||||
- **Website:** `pnpm prepr:frontend:web`
|
||||
- **App frontend:** `pnpm prepr:frontend:app`
|
||||
- **Frontend libs:** `pnpm prepr:frontend:lib`
|
||||
- **All frontend (app+web):** `pnpm prepr`
|
||||
- **Labrinth (backend):** See `apps/labrinth/AGENTS.md`
|
||||
|
||||
The website and app `prepr` commands
|
||||
|
||||
## Dev Commands
|
||||
|
||||
- **Website:** `pnpm web:dev` (copy `.env` template in `apps/frontend/` first)
|
||||
- **App:** `pnpm app:dev` (copy `.env` template in `packages/app-lib/` first)
|
||||
- **Storybook (packages/ui):** `pnpm storybook`
|
||||
|
||||
## Project-Specific Instructions
|
||||
|
||||
Each project may have its own file with detailed instructions:
|
||||
|
||||
- [`apps/labrinth/AGENTS.md`](apps/labrinth/AGENTS.md) — Backend API
|
||||
- [`apps/frontend/CLAUDE.md`](apps/frontend/CLAUDE.md) - Frontend Website
|
||||
|
||||
## Code Guidelines
|
||||
|
||||
### Comments
|
||||
- DO NOT use "heading" comments like: `=== Helper methods ===`.
|
||||
- Use doc comments, but avoid inline comments unless ABSOLUTELY necessary for clarity. Code should aim to be self documenting!
|
||||
|
||||
## Bash Guidelines
|
||||
|
||||
### Output handling
|
||||
- DO NOT pipe output through `head`, `tail`, `less`, or `more`
|
||||
- NEVER use `| head -n X` or `| tail -n X` to truncate output
|
||||
- IMPORTANT: Run commands directly without pipes when possible
|
||||
- IMPORTANT: If you need to limit output, use command-specific flags (e.g. `git log -n 10` instead of `git log | head -10`)
|
||||
- ALWAYS read the full output — never pipe through filters
|
||||
|
||||
### 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)
|
||||
|
||||
The Read tool uses `→` to mark where line numbers end and file content begins.
|
||||
|
||||
**Rule:** Copy the EXACT whitespace that appears after the `→` marker.
|
||||
- Whatever appears between `→` and the code text is what's actually in the file
|
||||
- That whitespace must be used EXACTLY in Edit tool's old_string
|
||||
- Don't count arrows, don't interpret - just copy what's after the `→`
|
||||
|
||||
**Example:**
|
||||
14→ private byte tag;
|
||||
For Edit, use: ` private byte tag;` (copy everything after →, including the two tabs)
|
||||
|
||||
**If Edit fails:** Stop and explain the problem. Do not attempt sed/awk/bash workarounds.
|
||||
|
||||
**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.
|
||||
|
||||
## Standards
|
||||
|
||||
Standards available at the @standards/ folder.
|
||||
Generated
+13
-87
@@ -2331,15 +2331,6 @@ version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
|
||||
|
||||
[[package]]
|
||||
name = "convert_case"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f"
|
||||
dependencies = [
|
||||
"unicode-segmentation",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "convert_case"
|
||||
version = "0.10.0"
|
||||
@@ -5217,15 +5208,6 @@ version = "1.70.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
|
||||
|
||||
[[package]]
|
||||
name = "iso8601"
|
||||
version = "0.6.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e1082f0c48f143442a1ac6122f67e360ceee130b967af4d50996e5154a45df46"
|
||||
dependencies = [
|
||||
"nom 8.0.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itertools"
|
||||
version = "0.12.1"
|
||||
@@ -5385,19 +5367,6 @@ dependencies = [
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "jsonwebtoken"
|
||||
version = "9.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5a87cc7a48537badeae96744432de36f4be2b4a34a05a5ef32e9dd8a1c169dde"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"js-sys",
|
||||
"ring",
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "keyboard-types"
|
||||
version = "0.7.0"
|
||||
@@ -5491,7 +5460,6 @@ dependencies = [
|
||||
"json-patch 4.1.0",
|
||||
"labrinth",
|
||||
"lettre",
|
||||
"meilisearch-sdk",
|
||||
"modrinth-content-management",
|
||||
"modrinth-util",
|
||||
"muralpay",
|
||||
@@ -5515,6 +5483,7 @@ dependencies = [
|
||||
"scalar_api_reference",
|
||||
"sentry",
|
||||
"serde",
|
||||
"serde-binhum",
|
||||
"serde_json",
|
||||
"serde_with",
|
||||
"sha1 0.10.6",
|
||||
@@ -5954,49 +5923,6 @@ version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ae960838283323069879657ca3de837e9f7bbb4c7bf6ea7f1b290d5e9476d2e0"
|
||||
|
||||
[[package]]
|
||||
name = "meilisearch-index-setting-macro"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e36e5cad3754ed329feb201c24f26c0694442bef50a90dbcff0ba6d12b5ca133"
|
||||
dependencies = [
|
||||
"convert_case 0.8.0",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"structmeta",
|
||||
"syn 2.0.106",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "meilisearch-sdk"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f620c9ed9b790cf292b66c8dab16f0e4aafb377583ec0e589da7c3ee81ff2038"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"bytes",
|
||||
"either",
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
"futures-io",
|
||||
"futures-util",
|
||||
"iso8601",
|
||||
"jsonwebtoken",
|
||||
"log",
|
||||
"meilisearch-index-setting-macro",
|
||||
"pin-project-lite",
|
||||
"reqwest 0.12.24",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror 2.0.17",
|
||||
"time",
|
||||
"tokio",
|
||||
"uuid 1.23.3",
|
||||
"wasm-bindgen-futures",
|
||||
"web-sys",
|
||||
"yaup",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.7.6"
|
||||
@@ -9379,6 +9305,16 @@ dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde-binhum"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"darling 0.23.0",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.106",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde-untagged"
|
||||
version = "0.1.9"
|
||||
@@ -13443,12 +13379,13 @@ dependencies = [
|
||||
"chrono",
|
||||
"dashmap",
|
||||
"deadpool-redis",
|
||||
"eyre",
|
||||
"futures",
|
||||
"lz4_flex",
|
||||
"postcard",
|
||||
"prometheus",
|
||||
"redis",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror 2.0.17",
|
||||
"tokio",
|
||||
"tracing",
|
||||
@@ -13487,17 +13424,6 @@ dependencies = [
|
||||
"xml-rs",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "yaup"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b0144f1a16a199846cb21024da74edd930b43443463292f536b7110b4855b5c6"
|
||||
dependencies = [
|
||||
"form_urlencoded",
|
||||
"serde",
|
||||
"thiserror 1.0.69",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "yoke"
|
||||
version = "0.8.0"
|
||||
|
||||
+2
-1
@@ -15,6 +15,7 @@ members = [
|
||||
"packages/modrinth-util",
|
||||
"packages/neverbounce",
|
||||
"packages/path-util",
|
||||
"packages/serde-binhum",
|
||||
"packages/xredis",
|
||||
]
|
||||
|
||||
@@ -130,7 +131,6 @@ lz4_flex = { version = "0.11.5", default-features = false, features = [
|
||||
"std",
|
||||
] }
|
||||
maxminddb = "0.26.0"
|
||||
meilisearch-sdk = { version = "0.30.0", default-features = false }
|
||||
modrinth-content-management = { path = "packages/modrinth-content-management" }
|
||||
modrinth-log = { path = "packages/modrinth-log" }
|
||||
modrinth-util = { path = "packages/modrinth-util" }
|
||||
@@ -183,6 +183,7 @@ sentry = { version = "0.45.0", default-features = false, features = [
|
||||
"rustls",
|
||||
] }
|
||||
serde = "1.0.228"
|
||||
serde-binhum = { path = "packages/serde-binhum" }
|
||||
serde_bytes = "0.11.19"
|
||||
serde_cbor = "0.11.2"
|
||||
serde_ini = "0.2.0"
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
## Modrinth Monorepo
|
||||
|
||||
Welcome to the Modrinth Monorepo, the primary codebase for the Modrinth web interface and app. It contains  lines of code and has  contributors!
|
||||
Welcome to the Modrinth Monorepo, the primary codebase for the Modrinth web interface and app. It contains  lines of code and has  contributors!
|
||||
|
||||
If you're not a developer and you've stumbled upon this repository, you can access the web interface on the [Modrinth website](https://modrinth.com) and download the latest release of the app [here](https://modrinth.com/app).
|
||||
|
||||
|
||||
+104
-61
@@ -29,24 +29,25 @@ import {
|
||||
import {
|
||||
Admonition,
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
ButtonLink,
|
||||
commonMessages,
|
||||
ContentInstallModal,
|
||||
ContentUpdaterModal,
|
||||
CreationFlowModal,
|
||||
defineMessages,
|
||||
I18nDebugPanel,
|
||||
IconButton,
|
||||
IntlFormatted,
|
||||
LoadingBar,
|
||||
NewsArticleCard,
|
||||
NotificationPanel,
|
||||
OverflowMenu,
|
||||
PopupNotificationPanel,
|
||||
provideModalBehavior,
|
||||
provideModrinthClient,
|
||||
provideNotificationManager,
|
||||
providePageContext,
|
||||
providePopupNotificationManager,
|
||||
TeleportOverflowMenu,
|
||||
TextLogo,
|
||||
useDebugLogger,
|
||||
useFormatBytes,
|
||||
@@ -94,8 +95,9 @@ import {
|
||||
hide_ads_window,
|
||||
init_ads_window,
|
||||
perform_ads_consent_action,
|
||||
release_ads_window_hold,
|
||||
should_show_ads_consent_popup,
|
||||
show_ads_window,
|
||||
take_ads_window_hold,
|
||||
} from '@/helpers/ads.js'
|
||||
import { debugAnalytics, initAnalytics, trackEvent } from '@/helpers/analytics'
|
||||
import { check_reachable } from '@/helpers/auth.js'
|
||||
@@ -120,6 +122,7 @@ import {
|
||||
} from '@/helpers/utils.js'
|
||||
import { start_join_server, start_join_singleplayer_world } from '@/helpers/worlds.ts'
|
||||
import i18n from '@/i18n.config'
|
||||
import { instanceKeys } from '@/pages/instance/query-options'
|
||||
import {
|
||||
appUpdateState,
|
||||
downloadAvailableAppUpdate,
|
||||
@@ -164,6 +167,25 @@ function updateHistoryNavigationState() {
|
||||
canNavigateForward.value = historyState?.forward != null
|
||||
}
|
||||
|
||||
let fullscreenAdsWindowHold = false
|
||||
|
||||
async function handleFullscreenChange() {
|
||||
const fullscreen = document.fullscreenElement !== null
|
||||
if (fullscreen === fullscreenAdsWindowHold) return
|
||||
|
||||
fullscreenAdsWindowHold = fullscreen
|
||||
try {
|
||||
if (fullscreen) {
|
||||
await take_ads_window_hold()
|
||||
} else {
|
||||
await release_ads_window_hold()
|
||||
}
|
||||
} catch (error) {
|
||||
fullscreenAdsWindowHold = !fullscreen
|
||||
handleError(error)
|
||||
}
|
||||
}
|
||||
|
||||
updateHistoryNavigationState()
|
||||
|
||||
const APP_LEFT_NAV_WIDTH = '4rem'
|
||||
@@ -173,9 +195,12 @@ const PRIDE_FUNDRAISER_END_DATE = new Date('2026-07-01T00:00:00Z').getTime()
|
||||
const credentials = ref()
|
||||
let credentialsRefreshId = 0
|
||||
const sidebarToggled = ref(true)
|
||||
const unsubscribeSidebarToggle = themeStore.$subscribe(() => {
|
||||
sidebarToggled.value = !themeStore.toggleSidebar
|
||||
})
|
||||
watch(
|
||||
() => themeStore.toggleSidebar,
|
||||
(toggleSidebar) => {
|
||||
sidebarToggled.value = !toggleSidebar
|
||||
},
|
||||
)
|
||||
const forceSidebar = computed(
|
||||
() => route.path.startsWith('/browse') || route.path.startsWith('/project'),
|
||||
)
|
||||
@@ -242,7 +267,7 @@ const { data: authenticatedModrinthUser } = useQuery({
|
||||
retry: false,
|
||||
})
|
||||
useQuery({
|
||||
queryKey: computed(() => ['shared-instance-eligibility', credentials.value?.user?.id]),
|
||||
queryKey: computed(() => instanceKeys.sharedEligibility(credentials.value?.user?.id)),
|
||||
queryFn: can_current_user_use_shared_instances,
|
||||
enabled: () => !!credentials.value?.session && !!credentials.value?.user?.id,
|
||||
retry: false,
|
||||
@@ -279,8 +304,8 @@ providePageContext({
|
||||
})
|
||||
provideModalBehavior({
|
||||
noblur: computed(() => !themeStore.advancedRendering),
|
||||
onShow: () => hide_ads_window(),
|
||||
onHide: () => show_ads_window(),
|
||||
onShow: () => take_ads_window_hold(),
|
||||
onHide: () => release_ads_window_hold(),
|
||||
})
|
||||
|
||||
const {
|
||||
@@ -295,7 +320,7 @@ const {
|
||||
setModpackAlreadyInstalledModal,
|
||||
handleModpackDuplicateCreateAnyway,
|
||||
handleModpackDuplicateGoToInstance,
|
||||
} = setupProviders(notificationManager, popupNotificationManager)
|
||||
} = setupProviders(tauriApiClient, notificationManager, popupNotificationManager)
|
||||
|
||||
const news = ref([])
|
||||
const displayedServerInviteNotifications = new Set()
|
||||
@@ -355,6 +380,7 @@ onMounted(async () => {
|
||||
|
||||
document.querySelector('body').addEventListener('click', handleClick)
|
||||
document.querySelector('body').addEventListener('auxclick', handleAuxClick)
|
||||
document.addEventListener('fullscreenchange', handleFullscreenChange)
|
||||
|
||||
checkUpdates()
|
||||
})
|
||||
@@ -362,9 +388,13 @@ onMounted(async () => {
|
||||
onUnmounted(async () => {
|
||||
document.querySelector('body').removeEventListener('click', handleClick)
|
||||
document.querySelector('body').removeEventListener('auxclick', handleAuxClick)
|
||||
unsubscribeSidebarToggle()
|
||||
document.removeEventListener('fullscreenchange', handleFullscreenChange)
|
||||
clearDelayedUpdatePopup()
|
||||
|
||||
if (fullscreenAdsWindowHold) {
|
||||
fullscreenAdsWindowHold = false
|
||||
await release_ads_window_hold().catch(handleError)
|
||||
}
|
||||
await unlistenAdsConsent?.()
|
||||
await unlistenUpdateDownload?.()
|
||||
})
|
||||
@@ -1545,8 +1575,10 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
|
||||
<NavButton
|
||||
v-tooltip.right="formatMessage(commonMessages.discoverContentLabel)"
|
||||
to="/browse/modpack"
|
||||
:is-primary="() => route.path.startsWith('/browse') && !route.query.i"
|
||||
:is-subpage="(route) => route.path.startsWith('/project') && !route.query.i"
|
||||
:is-primary="() => route.path.startsWith('/browse') && !route.query.i && !route.query.sid"
|
||||
:is-subpage="
|
||||
(route) => route.path.startsWith('/project') && !route.query.i && !route.query.sid
|
||||
"
|
||||
>
|
||||
<CompassIcon />
|
||||
</NavButton>
|
||||
@@ -1570,7 +1602,11 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
|
||||
v-tooltip.right="formatMessage(messages.modrinthHosting)"
|
||||
to="/hosting/manage"
|
||||
:is-primary="(r) => r.path === '/hosting/manage' || r.path === '/hosting/manage/'"
|
||||
:is-subpage="(r) => r.path.startsWith('/hosting/manage/') && r.path !== '/hosting/manage/'"
|
||||
:is-subpage="
|
||||
(r) =>
|
||||
(r.path.startsWith('/hosting/manage/') && r.path !== '/hosting/manage/') ||
|
||||
((r.path.startsWith('/browse') || r.path.startsWith('/project')) && r.query.sid)
|
||||
"
|
||||
>
|
||||
<ServerStackIcon />
|
||||
</NavButton>
|
||||
@@ -1591,22 +1627,29 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
|
||||
>
|
||||
<SettingsIcon />
|
||||
</NavButton>
|
||||
<OverflowMenu
|
||||
<TeleportOverflowMenu
|
||||
v-if="credentials?.user"
|
||||
v-tooltip.right="formatMessage(messages.modrinthAccount)"
|
||||
class="w-12 h-12 text-primary rounded-full flex items-center justify-center text-2xl transition-all bg-transparent hover:bg-button-bg hover:text-contrast border-0 cursor-pointer"
|
||||
type="quiet"
|
||||
size="xl"
|
||||
label="More options"
|
||||
:options="[
|
||||
{
|
||||
id: 'view-profile',
|
||||
label: formatMessage(messages.signedInAs, {
|
||||
username: credentials.user.username,
|
||||
}),
|
||||
action: () => router.push(`/user/${encodeURIComponent(credentials.user.username)}`),
|
||||
},
|
||||
{
|
||||
id: 'sign-out',
|
||||
label: formatMessage(commonMessages.signOutButton),
|
||||
tone: 'red',
|
||||
action: () => logOut(),
|
||||
color: 'danger',
|
||||
},
|
||||
]"
|
||||
placement="right-end"
|
||||
:distance="4"
|
||||
>
|
||||
<Avatar :src="credentials?.user?.avatar_url" alt="" size="32px" circle />
|
||||
<template #view-profile>
|
||||
@@ -1629,7 +1672,7 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
|
||||
<LogOutIcon />
|
||||
{{ formatMessage(commonMessages.signOutButton) }}
|
||||
</template>
|
||||
</OverflowMenu>
|
||||
</TeleportOverflowMenu>
|
||||
<NavButton
|
||||
v-else
|
||||
v-tooltip.right="formatMessage(messages.signInToModrinthAccount)"
|
||||
@@ -1642,49 +1685,44 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
|
||||
<div data-tauri-drag-region class="flex min-w-0 flex-1 items-center overflow-hidden p-2">
|
||||
<TextLogo class="h-7 w-auto shrink-0 text-contrast pointer-events-none" />
|
||||
<div data-tauri-drag-region class="ml-2 flex shrink-0 items-center gap-2">
|
||||
<ButtonStyled type="outlined" circular>
|
||||
<button
|
||||
class="!h-7 !min-w-7 !w-7 !border !border-surface-4 !p-0 !opacity-100"
|
||||
:disabled="!canNavigateBack"
|
||||
aria-label="Go back"
|
||||
@click="router.back()"
|
||||
>
|
||||
<ChevronLeftIcon
|
||||
class="!size-4 !text-primary"
|
||||
:class="{ 'opacity-20': !canNavigateBack }"
|
||||
/>
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled type="outlined" circular>
|
||||
<button
|
||||
class="!h-7 !min-w-7 !w-7 !border !border-surface-4 !p-0 !opacity-100"
|
||||
:disabled="!canNavigateForward"
|
||||
aria-label="Go forward"
|
||||
@click="router.forward()"
|
||||
>
|
||||
<ChevronRightIcon
|
||||
class="!size-4 !text-primary"
|
||||
:class="{ 'opacity-20': !canNavigateForward }"
|
||||
/>
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<IconButton
|
||||
type="outlined"
|
||||
label="Go back"
|
||||
class="!h-7 !min-w-7 !w-7 !border !border-surface-4 !p-0 !opacity-100"
|
||||
:disabled="!canNavigateBack"
|
||||
@click="router.back()"
|
||||
>
|
||||
<ChevronLeftIcon
|
||||
class="!size-4 !text-primary"
|
||||
:class="{ 'opacity-20': !canNavigateBack }"
|
||||
/>
|
||||
</IconButton>
|
||||
<IconButton
|
||||
type="outlined"
|
||||
label="Go forward"
|
||||
class="!h-7 !min-w-7 !w-7 !border !border-surface-4 !p-0 !opacity-100"
|
||||
:disabled="!canNavigateForward"
|
||||
@click="router.forward()"
|
||||
>
|
||||
<ChevronRightIcon
|
||||
class="!size-4 !text-primary"
|
||||
:class="{ 'opacity-20': !canNavigateForward }"
|
||||
/>
|
||||
</IconButton>
|
||||
</div>
|
||||
<Breadcrumbs />
|
||||
</div>
|
||||
<section data-tauri-drag-region class="flex shrink-0 ml-auto items-center">
|
||||
<ButtonStyled
|
||||
<IconButton
|
||||
v-if="!forceSidebar && themeStore.toggleSidebar"
|
||||
:type="sidebarToggled ? 'standard' : 'transparent'"
|
||||
circular
|
||||
:type="sidebarToggled ? 'base' : 'quiet'"
|
||||
label="Next image"
|
||||
class="mr-3 transition-transform"
|
||||
:class="{ 'rotate-180': !sidebarToggled }"
|
||||
@click="sidebarToggled = !sidebarToggled"
|
||||
>
|
||||
<button
|
||||
class="mr-3 transition-transform"
|
||||
:class="{ 'rotate-180': !sidebarToggled }"
|
||||
@click="sidebarToggled = !sidebarToggled"
|
||||
>
|
||||
<RightArrowIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<RightArrowIcon />
|
||||
</IconButton>
|
||||
<div class="flex mr-3">
|
||||
<Suspense>
|
||||
<AppActionBar />
|
||||
@@ -1793,12 +1831,17 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
|
||||
:key="`news-${index}`"
|
||||
:article="item"
|
||||
/>
|
||||
<ButtonStyled color="brand" size="large">
|
||||
<a href="https://modrinth.com/news" target="_blank" class="my-4">
|
||||
<NewspaperIcon />
|
||||
{{ formatMessage(messages.viewAllNews) }}
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
<ButtonLink
|
||||
type="colored"
|
||||
color="brand"
|
||||
size="xl"
|
||||
href="https://modrinth.com/news"
|
||||
target="_blank"
|
||||
class="my-4"
|
||||
>
|
||||
<NewspaperIcon />
|
||||
{{ formatMessage(messages.viewAllNews) }}
|
||||
</ButtonLink>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4,13 +4,11 @@
|
||||
class="flex flex-col gap-3 bg-button-bg border border-solid border-surface-5 rounded-xl p-3 mt-2"
|
||||
>
|
||||
<span>{{ formatMessage(messages.notSignedIn) }}</span>
|
||||
<ButtonStyled color="brand">
|
||||
<button color="primary" :disabled="loginDisabled" @click="login()">
|
||||
<LogInIcon v-if="!loginDisabled" />
|
||||
<SpinnerIcon v-else class="animate-spin" />
|
||||
{{ formatMessage(messages.signInToMinecraft) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="colored" color="brand" :disabled="loginDisabled" @click="login()">
|
||||
<LogInIcon v-if="!loginDisabled" />
|
||||
<SpinnerIcon v-else class="animate-spin" />
|
||||
{{ formatMessage(messages.signInToMinecraft) }}
|
||||
</Button>
|
||||
</div>
|
||||
<Accordion
|
||||
v-else
|
||||
@@ -60,24 +58,28 @@
|
||||
{{ account.profile.name }}
|
||||
</p>
|
||||
</button>
|
||||
<ButtonStyled circular color="red" color-fill="none" hover-color-fill="background">
|
||||
<button
|
||||
v-tooltip="formatMessage(messages.removeAccount)"
|
||||
class="mr-2"
|
||||
@click="logout(account.profile.id)"
|
||||
>
|
||||
<TrashIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<IconButton
|
||||
v-tooltip="formatMessage(messages.removeAccount)"
|
||||
type="quiet"
|
||||
color="red"
|
||||
:label="formatMessage(messages.removeAccount)"
|
||||
class="mr-2 !bg-button-bg !text-primary ![box-shadow:var(--shadow-button)] hover:!bg-red focus-visible:!bg-red hover:!text-[var(--color-accent-contrast)] focus-visible:!text-[var(--color-accent-contrast)]"
|
||||
@click="logout(account.profile.id)"
|
||||
>
|
||||
<TrashIcon />
|
||||
</IconButton>
|
||||
</div>
|
||||
</template>
|
||||
<div class="flex flex-col gap-2 px-2 pt-2">
|
||||
<ButtonStyled v-if="accounts.length > 0" class="w-full">
|
||||
<button :disabled="loginDisabled" @click="login()">
|
||||
<PlusIcon />
|
||||
{{ formatMessage(messages.addAccount) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button
|
||||
v-if="accounts.length > 0"
|
||||
class="w-full !bg-button-bg !text-primary ![box-shadow:var(--shadow-button)]"
|
||||
:disabled="loginDisabled"
|
||||
@click="login()"
|
||||
>
|
||||
<PlusIcon />
|
||||
{{ formatMessage(messages.addAccount) }}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</Accordion>
|
||||
@@ -95,8 +97,9 @@ import {
|
||||
import {
|
||||
Accordion,
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
Button,
|
||||
defineMessages,
|
||||
IconButton,
|
||||
injectNotificationManager,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script setup lang="ts">
|
||||
import { DropdownIcon, FolderOpenIcon, PlusIcon } from '@modrinth/assets'
|
||||
import { ButtonStyled, injectNotificationManager, OverflowMenu } from '@modrinth/ui'
|
||||
import { Button, injectNotificationManager, TeleportOverflowMenu } from '@modrinth/ui'
|
||||
import { open } from '@tauri-apps/plugin-dialog'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
@@ -36,27 +36,26 @@ const handleSearchContent = async () => {
|
||||
|
||||
<template>
|
||||
<div class="joined-buttons">
|
||||
<ButtonStyled>
|
||||
<button @click="handleSearchContent">
|
||||
<PlusIcon />
|
||||
Install content
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<OverflowMenu
|
||||
:options="[
|
||||
{
|
||||
id: 'from_file',
|
||||
action: handleAddContentFromFile,
|
||||
},
|
||||
]"
|
||||
>
|
||||
<DropdownIcon />
|
||||
<template #from_file>
|
||||
<FolderOpenIcon />
|
||||
<span class="no-wrap"> Add from file </span>
|
||||
</template>
|
||||
</OverflowMenu>
|
||||
</ButtonStyled>
|
||||
<Button @click="handleSearchContent">
|
||||
<PlusIcon />
|
||||
Install content
|
||||
</Button>
|
||||
<TeleportOverflowMenu
|
||||
label="More options"
|
||||
:options="[
|
||||
{
|
||||
id: 'from_file',
|
||||
label: 'Add from file',
|
||||
action: handleAddContentFromFile,
|
||||
},
|
||||
]"
|
||||
class="!w-auto !px-2.5 !rounded-xl"
|
||||
>
|
||||
<DropdownIcon />
|
||||
<template #from_file>
|
||||
<FolderOpenIcon />
|
||||
<span class="no-wrap"> Add from file </span>
|
||||
</template>
|
||||
</TeleportOverflowMenu>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
<template>
|
||||
<div class="flex gap-2 items-center">
|
||||
<ButtonStyled
|
||||
v-if="hasActiveLoadingBars && !hasVisibleActiveDownloadToasts"
|
||||
color="brand"
|
||||
type="transparent"
|
||||
circular
|
||||
>
|
||||
<button v-tooltip="formatMessage(messages.viewActiveDownloads)" @click="openDownloadToast()">
|
||||
<div v-if="downloadState.total > 0 || hasActiveLoadingBars" class="relative">
|
||||
<IconButton
|
||||
v-tooltip="downloadToggleLabel"
|
||||
:color="downloadState.hidden > 0 ? 'brand' : undefined"
|
||||
type="quiet"
|
||||
:label="downloadToggleLabel"
|
||||
@click="toggleDownloadNotifications"
|
||||
>
|
||||
<DownloadIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</IconButton>
|
||||
</div>
|
||||
<div v-if="offline" class="flex items-center gap-1">
|
||||
<UnplugIcon class="text-secondary" />
|
||||
<span class="text-sm text-contrast"> {{ formatMessage(messages.offline) }} </span>
|
||||
@@ -36,17 +37,23 @@
|
||||
@show="showInstances = true"
|
||||
@hide="showInstances = false"
|
||||
>
|
||||
<ButtonStyled type="transparent" circular size="small">
|
||||
<button
|
||||
v-tooltip="
|
||||
showInstances
|
||||
? formatMessage(messages.hideMoreRunningInstances)
|
||||
: formatMessage(messages.showMoreRunningInstances)
|
||||
"
|
||||
>
|
||||
<DropdownIcon :class="{ 'rotate-180': !!showInstances }" />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<IconButton
|
||||
v-tooltip="
|
||||
showInstances
|
||||
? formatMessage(messages.hideMoreRunningInstances)
|
||||
: formatMessage(messages.showMoreRunningInstances)
|
||||
"
|
||||
class="!size-6"
|
||||
type="quiet"
|
||||
size="xs"
|
||||
:label="
|
||||
showInstances
|
||||
? formatMessage(messages.hideMoreRunningInstances)
|
||||
: formatMessage(messages.showMoreRunningInstances)
|
||||
"
|
||||
>
|
||||
<DropdownIcon :class="{ 'rotate-180': !!showInstances }" />
|
||||
</IconButton>
|
||||
<template #popper>
|
||||
<div class="flex w-[20rem] max-h-[24rem] flex-col gap-2 overflow-auto">
|
||||
<div
|
||||
@@ -125,8 +132,8 @@ import {
|
||||
TerminalSquareIcon,
|
||||
UnplugIcon,
|
||||
} from '@modrinth/assets'
|
||||
import { IconButton } from '@modrinth/ui'
|
||||
import {
|
||||
ButtonStyled,
|
||||
defineMessages,
|
||||
injectNotificationManager,
|
||||
injectPopupNotificationManager,
|
||||
@@ -212,8 +219,35 @@ const messages = defineMessages({
|
||||
id: 'app.action-bar.view-active-downloads',
|
||||
defaultMessage: 'View active downloads',
|
||||
},
|
||||
hideDownloads: {
|
||||
id: 'app.action-bar.hide-downloads',
|
||||
defaultMessage: 'Hide active downloads',
|
||||
},
|
||||
showDownloads: {
|
||||
id: 'app.action-bar.show-downloads',
|
||||
defaultMessage: 'Show active downloads',
|
||||
},
|
||||
})
|
||||
|
||||
const downloadState = computed(() => popupNotificationManager.getDownloadState())
|
||||
const downloadToggleLabel = computed(() =>
|
||||
formatMessage(
|
||||
downloadState.value.hidden > 0
|
||||
? messages.showDownloads
|
||||
: downloadState.value.total > 0
|
||||
? messages.hideDownloads
|
||||
: messages.viewActiveDownloads,
|
||||
),
|
||||
)
|
||||
|
||||
function toggleDownloadNotifications(): void {
|
||||
if (downloadState.value.total > 0) {
|
||||
popupNotificationManager.toggleDownloadNotifications()
|
||||
} else if (hasActiveLoadingBars.value) {
|
||||
openDownloadToast()
|
||||
}
|
||||
}
|
||||
|
||||
const currentProcesses = ref<RunningProcess[]>([])
|
||||
const selectedProcess = ref<RunningProcess | undefined>()
|
||||
|
||||
@@ -290,6 +324,7 @@ function goToTerminal(instanceId?: string) {
|
||||
const currentLoadingBars = ref<LoadingBar[]>([])
|
||||
const currentLoadingBarIconUrls = ref<Record<string, string | null>>({})
|
||||
const notificationId = ref<string | number | null>(null)
|
||||
const terminalNotificationIds = new Map<string, string | number>()
|
||||
const dismissed = ref(false)
|
||||
|
||||
function getLoadingBarKey(loadingBar: LoadingBar): string {
|
||||
@@ -335,6 +370,44 @@ function removeNotification(): void {
|
||||
notificationId.value = null
|
||||
}
|
||||
|
||||
function syncTerminalNotifications(): void {
|
||||
const terminalNotifications = installJobNotifications.terminalNotifications.value
|
||||
const currentJobIds = new Set(terminalNotifications.map((notification) => notification.id))
|
||||
|
||||
for (const terminal of terminalNotifications) {
|
||||
const popupId = terminalNotificationIds.get(terminal.id)
|
||||
let notification = popupId
|
||||
? popupNotificationManager.getNotifications().find((candidate) => candidate.id === popupId)
|
||||
: undefined
|
||||
|
||||
if (!notification) {
|
||||
notification = popupNotificationManager.addPopupNotification({
|
||||
title: terminal.title,
|
||||
text: terminal.text,
|
||||
type: terminal.type,
|
||||
buttons: terminal.buttons,
|
||||
onDismiss: terminal.onDismiss,
|
||||
autoCloseMs: null,
|
||||
})
|
||||
terminalNotificationIds.set(terminal.id, notification.id)
|
||||
continue
|
||||
}
|
||||
|
||||
notification.title = terminal.title
|
||||
notification.text = terminal.text
|
||||
notification.type = terminal.type
|
||||
notification.buttons = terminal.buttons
|
||||
notification.onDismiss = terminal.onDismiss
|
||||
}
|
||||
|
||||
for (const [jobId, popupId] of terminalNotificationIds) {
|
||||
if (!currentJobIds.has(jobId)) {
|
||||
popupNotificationManager.removeNotification(popupId)
|
||||
terminalNotificationIds.delete(jobId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function buildDownloadItems(): PopupNotificationProgressItem[] {
|
||||
return [
|
||||
...installJobNotifications.progressItems.value,
|
||||
@@ -345,19 +418,20 @@ function buildDownloadItems(): PopupNotificationProgressItem[] {
|
||||
iconUrl: currentLoadingBarIconUrls.value[getLoadingBarKey(bar)] ?? null,
|
||||
progress: getLoadingProgress(bar),
|
||||
waiting: !bar.total || bar.total <= 0,
|
||||
progressType: 'percentage',
|
||||
progressType: bar.bar_type?.type === 'pack_import' ? 'bytes' : 'percentage',
|
||||
progressCurrent: bar.current,
|
||||
progressTotal: bar.total,
|
||||
})),
|
||||
]
|
||||
}
|
||||
|
||||
const hasVisibleActiveDownloadToasts = computed(() => !!getNotification())
|
||||
const hasActiveLoadingBars = computed(
|
||||
() => currentLoadingBars.value.length > 0 || installJobNotifications.active.value,
|
||||
)
|
||||
|
||||
function updateNotification(resummon = false): void {
|
||||
syncTerminalNotifications()
|
||||
|
||||
if (resummon) {
|
||||
dismissed.value = false
|
||||
}
|
||||
@@ -386,7 +460,6 @@ function updateNotification(resummon = false): void {
|
||||
: formatMessage(messages.downloads)
|
||||
notif.text = undefined
|
||||
notif.progressItems = progressItems
|
||||
notif.buttons = installJobNotifications.buttons.value
|
||||
notif.progress = undefined
|
||||
notif.waiting = undefined
|
||||
} else {
|
||||
@@ -397,7 +470,6 @@ function updateNotification(resummon = false): void {
|
||||
type: 'download',
|
||||
autoCloseMs: null,
|
||||
progressItems,
|
||||
buttons: installJobNotifications.buttons.value,
|
||||
})
|
||||
notificationId.value = notif.id
|
||||
}
|
||||
@@ -496,6 +568,8 @@ function selectProcess(process: RunningProcess) {
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
removeNotification()
|
||||
terminalNotificationIds.forEach((id) => popupNotificationManager.removeNotification(id))
|
||||
terminalNotificationIds.clear()
|
||||
dismissed.value = false
|
||||
window.removeEventListener('offline', handleOffline)
|
||||
window.removeEventListener('online', handleOnline)
|
||||
|
||||
@@ -9,7 +9,13 @@ import {
|
||||
WrenchIcon,
|
||||
XIcon,
|
||||
} from '@modrinth/assets'
|
||||
import { ButtonStyled, Collapsible, injectNotificationManager } from '@modrinth/ui'
|
||||
import {
|
||||
Button,
|
||||
ButtonLink,
|
||||
Collapsible,
|
||||
IconButton,
|
||||
injectNotificationManager,
|
||||
} from '@modrinth/ui'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
import { ChatIcon } from '@/assets/icons'
|
||||
@@ -273,12 +279,10 @@ async function copyToClipboard(text) {
|
||||
</template>
|
||||
</div>
|
||||
<div class="flex items-center gap-2">
|
||||
<ButtonStyled>
|
||||
<a :href="supportLink" @click="errorModal.hide()"><ChatIcon /> Get support</a>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-if="closable">
|
||||
<button @click="errorModal.hide()"><XIcon /> Close</button>
|
||||
</ButtonStyled>
|
||||
<ButtonLink :href="supportLink" @click="errorModal.hide()"
|
||||
><ChatIcon /> Get support</ButtonLink
|
||||
>
|
||||
<Button v-if="closable" @click="errorModal.hide()"><XIcon /> Close</Button>
|
||||
</div>
|
||||
<template v-if="hasDebugInfo">
|
||||
<div class="flex flex-col gap-2">
|
||||
@@ -307,16 +311,15 @@ async function copyToClipboard(text) {
|
||||
>
|
||||
{{ debugInfo }}
|
||||
</div>
|
||||
<ButtonStyled circular>
|
||||
<button
|
||||
v-tooltip="'Copy debug info'"
|
||||
:disabled="copied"
|
||||
@click="copyToClipboard(debugInfo)"
|
||||
>
|
||||
<template v-if="copied"> <CheckIcon class="text-green" /> </template>
|
||||
<template v-else> <CopyIcon /> </template>
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<IconButton
|
||||
v-tooltip="'Copy debug info'"
|
||||
:label="'Copy debug info'"
|
||||
:disabled="copied"
|
||||
@click="copyToClipboard(debugInfo)"
|
||||
>
|
||||
<template v-if="copied"> <CheckIcon class="text-green" /> </template>
|
||||
<template v-else> <CopyIcon /> </template>
|
||||
</IconButton>
|
||||
</div>
|
||||
</Collapsible>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script setup>
|
||||
import { XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
Button,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
FileTreeSelect,
|
||||
@@ -11,15 +11,10 @@ import {
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { save } from '@tauri-apps/plugin-dialog'
|
||||
import { readDir, stat } from '@tauri-apps/plugin-fs'
|
||||
import { ref } from 'vue'
|
||||
import { ref, shallowRef } from 'vue'
|
||||
|
||||
import { PackageIcon } from '@/assets/icons'
|
||||
import {
|
||||
export_instance_mrpack,
|
||||
get_full_path,
|
||||
get_pack_export_candidates,
|
||||
} from '@/helpers/instance'
|
||||
import { export_instance_mrpack, get_pack_export_candidates } from '@/helpers/instance'
|
||||
|
||||
const { handleError } = injectNotificationManager()
|
||||
const { formatMessage } = useVIntl()
|
||||
@@ -65,30 +60,24 @@ const exportModal = ref(null)
|
||||
const nameInput = ref(props.instance.name)
|
||||
const exportDescription = ref('')
|
||||
const versionInput = ref('1.0.0')
|
||||
const files = ref([])
|
||||
const selectedFilePaths = ref([])
|
||||
const files = shallowRef([])
|
||||
const includedFilePaths = ref([])
|
||||
const excludedFilePaths = ref([])
|
||||
const fileTreeKey = ref(0)
|
||||
const filesLoadId = ref(0)
|
||||
const instanceRoot = ref('')
|
||||
const loadedDirectories = ref(new Set())
|
||||
const directoryEntries = new Map()
|
||||
const currentDirectory = ref('')
|
||||
|
||||
async function initFiles() {
|
||||
const loadId = ++filesLoadId.value
|
||||
const [filePaths, root] = await Promise.all([
|
||||
get_pack_export_candidates(props.instance.id),
|
||||
get_full_path(props.instance.id),
|
||||
])
|
||||
if (loadId !== filesLoadId.value) return
|
||||
|
||||
instanceRoot.value = root
|
||||
const exportCandidates = await Promise.all(
|
||||
filePaths.map((path) => buildExportCandidateItem(root, path)),
|
||||
)
|
||||
const exportCandidates = await get_pack_export_candidates(props.instance.id)
|
||||
if (loadId !== filesLoadId.value) return
|
||||
|
||||
files.value = exportCandidates
|
||||
selectedFilePaths.value = files.value
|
||||
.filter((file) => !file.disabled && isDefaultSelectedExportCandidate(file.path))
|
||||
directoryEntries.set('', exportCandidates)
|
||||
currentDirectory.value = ''
|
||||
includedFilePaths.value = files.value
|
||||
.filter((file) => !file.disabled && file.defaultSelected)
|
||||
.map((file) => file.path)
|
||||
}
|
||||
|
||||
@@ -107,7 +96,8 @@ const exportPack = async () => {
|
||||
export_instance_mrpack(
|
||||
props.instance.id,
|
||||
outputPath,
|
||||
selectedFilePaths.value,
|
||||
includedFilePaths.value,
|
||||
excludedFilePaths.value,
|
||||
versionInput.value,
|
||||
exportDescription.value,
|
||||
nameInput.value,
|
||||
@@ -121,115 +111,45 @@ function resetExportState() {
|
||||
exportDescription.value = ''
|
||||
versionInput.value = '1.0.0'
|
||||
files.value = []
|
||||
selectedFilePaths.value = []
|
||||
includedFilePaths.value = []
|
||||
excludedFilePaths.value = []
|
||||
fileTreeKey.value += 1
|
||||
instanceRoot.value = ''
|
||||
loadedDirectories.value = new Set()
|
||||
directoryEntries.clear()
|
||||
currentDirectory.value = ''
|
||||
}
|
||||
|
||||
async function loadExportDirectory(path) {
|
||||
if (!path || !instanceRoot.value || loadedDirectories.value.has(path)) return
|
||||
const normalizedPath = normalizeExportPath(path)
|
||||
currentDirectory.value = normalizedPath
|
||||
|
||||
const cachedEntries = directoryEntries.get(normalizedPath)
|
||||
if (cachedEntries) {
|
||||
files.value = cachedEntries
|
||||
return
|
||||
}
|
||||
|
||||
const loadId = filesLoadId.value
|
||||
loadedDirectories.value.add(path)
|
||||
files.value = []
|
||||
|
||||
try {
|
||||
const entries = await readDir(`${instanceRoot.value}/${path}`)
|
||||
const childItems = await Promise.all(
|
||||
entries.map((entry) => buildExportDirectoryChildItem(instanceRoot.value, path, entry)),
|
||||
const childItems = await get_pack_export_candidates(
|
||||
props.instance.id,
|
||||
normalizedPath || undefined,
|
||||
)
|
||||
if (loadId !== filesLoadId.value) return
|
||||
|
||||
appendExportItems(childItems)
|
||||
} catch {
|
||||
loadedDirectories.value.delete(path)
|
||||
}
|
||||
}
|
||||
|
||||
async function buildExportCandidateItem(instanceRoot, path) {
|
||||
try {
|
||||
const entries = await readDir(`${instanceRoot}/${path}`)
|
||||
const metadata = await getExportCandidateMetadata(instanceRoot, path)
|
||||
return {
|
||||
path,
|
||||
type: 'directory',
|
||||
disabled: isExportCandidateDisabled(path),
|
||||
modified: metadata.modified,
|
||||
count: entries.length,
|
||||
directoryEntries.set(normalizedPath, childItems)
|
||||
if (currentDirectory.value === normalizedPath) {
|
||||
files.value = childItems
|
||||
}
|
||||
} catch {
|
||||
return buildExportFileItem(instanceRoot, path)
|
||||
}
|
||||
}
|
||||
|
||||
async function buildExportDirectoryChildItem(instanceRoot, parentPath, entry) {
|
||||
const path = `${parentPath}/${entry.name}`
|
||||
if (entry.isDirectory) {
|
||||
const metadata = await getExportCandidateMetadata(instanceRoot, path)
|
||||
return {
|
||||
path,
|
||||
type: 'directory',
|
||||
disabled: isExportCandidateDisabled(path),
|
||||
modified: metadata.modified,
|
||||
}
|
||||
}
|
||||
|
||||
return buildExportFileItem(instanceRoot, path)
|
||||
}
|
||||
|
||||
async function buildExportFileItem(instanceRoot, path) {
|
||||
const metadata = await getExportCandidateMetadata(instanceRoot, path)
|
||||
return {
|
||||
path,
|
||||
type: 'file',
|
||||
disabled: isExportCandidateDisabled(path),
|
||||
size: metadata.size,
|
||||
modified: metadata.modified,
|
||||
}
|
||||
}
|
||||
|
||||
function appendExportItems(items) {
|
||||
const nextFiles = new Map(files.value.map((file) => [normalizeExportPath(file.path), file]))
|
||||
for (const item of items) {
|
||||
nextFiles.set(normalizeExportPath(item.path), item)
|
||||
}
|
||||
files.value = [...nextFiles.values()]
|
||||
}
|
||||
|
||||
async function getExportCandidateMetadata(instanceRoot, path) {
|
||||
try {
|
||||
const metadata = await stat(`${instanceRoot}/${path}`)
|
||||
return {
|
||||
size: metadata.size,
|
||||
modified: metadata.mtime ? Math.floor(metadata.mtime.getTime() / 1000) : undefined,
|
||||
}
|
||||
} catch {
|
||||
return {}
|
||||
if (currentDirectory.value === normalizedPath) files.value = []
|
||||
}
|
||||
}
|
||||
|
||||
function normalizeExportPath(path) {
|
||||
return path.replaceAll('\\', '/').split('/').filter(Boolean).join('/')
|
||||
}
|
||||
|
||||
function isDefaultSelectedExportCandidate(path) {
|
||||
return (
|
||||
path.startsWith('mods') ||
|
||||
path.startsWith('datapacks') ||
|
||||
path.startsWith('resourcepacks') ||
|
||||
path.startsWith('shaderpacks') ||
|
||||
path.startsWith('config')
|
||||
)
|
||||
}
|
||||
|
||||
function isExportCandidateDisabled(path) {
|
||||
return (
|
||||
path === 'profile.json' ||
|
||||
path.startsWith('modrinth_logs') ||
|
||||
path.startsWith('.fabric') ||
|
||||
path.startsWith('__MACOSX')
|
||||
)
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -278,26 +198,24 @@ function isExportCandidateDisabled(path) {
|
||||
</div>
|
||||
<FileTreeSelect
|
||||
:key="fileTreeKey"
|
||||
v-model="selectedFilePaths"
|
||||
v-model="includedFilePaths"
|
||||
v-model:excluded-paths="excludedFilePaths"
|
||||
class="min-w-0"
|
||||
:items="files"
|
||||
lazy
|
||||
@navigate="loadExportDirectory"
|
||||
/>
|
||||
</div>
|
||||
<template #actions>
|
||||
<div class="flex items-center justify-end gap-2">
|
||||
<ButtonStyled type="outlined">
|
||||
<button @click="exportModal.hide">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button @click="exportPack">
|
||||
<PackageIcon />
|
||||
{{ formatMessage(messages.exportButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="outlined" @click="exportModal.hide">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</Button>
|
||||
<Button type="colored" color="brand" @click="exportPack">
|
||||
<PackageIcon />
|
||||
{{ formatMessage(messages.exportButton) }}
|
||||
</Button>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
StopCircleIcon,
|
||||
TimerIcon,
|
||||
} from '@modrinth/assets'
|
||||
import { Avatar, ButtonStyled, injectNotificationManager, useRelativeTime } from '@modrinth/ui'
|
||||
import { Avatar, IconButton, injectNotificationManager, useRelativeTime } from '@modrinth/ui'
|
||||
import { convertFileSrc } from '@tauri-apps/api/core'
|
||||
import dayjs from 'dayjs'
|
||||
import { computed, onMounted, onUnmounted, ref } from 'vue'
|
||||
@@ -168,30 +168,37 @@ onUnmounted(() => unlisten())
|
||||
<span class="line-clamp-2">{{ instance.name }}</span>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<ButtonStyled v-if="playing" color="red" circular @mousehover="checkProcess">
|
||||
<button v-tooltip="'Stop'" @click="(e) => stop(e, 'InstanceCard')">
|
||||
<StopCircleIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else-if="modLoading" color="standard" circular>
|
||||
<button v-tooltip="'Instance is loading...'" disabled>
|
||||
<SpinnerIcon class="animate-spin" />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled
|
||||
v-else-if="!instance.quarantined"
|
||||
:color="first ? 'brand' : 'standard'"
|
||||
circular
|
||||
<IconButton
|
||||
v-if="playing"
|
||||
v-tooltip="'Stop'"
|
||||
type="colored"
|
||||
color="red"
|
||||
:label="'Stop'"
|
||||
@mouseenter="checkProcess"
|
||||
@click="(e) => stop(e, 'InstanceCard')"
|
||||
>
|
||||
<button
|
||||
v-tooltip="'Play'"
|
||||
@click="(e) => play(e, 'InstanceCard')"
|
||||
@mousehover="checkProcess"
|
||||
>
|
||||
<!-- Translate for optical centering -->
|
||||
<PlayIcon class="translate-x-[1px]" />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<StopCircleIcon />
|
||||
</IconButton>
|
||||
<IconButton
|
||||
v-else-if="modLoading"
|
||||
v-tooltip="'Instance is loading...'"
|
||||
:label="'Instance is loading...'"
|
||||
disabled
|
||||
>
|
||||
<SpinnerIcon class="animate-spin" />
|
||||
</IconButton>
|
||||
<IconButton
|
||||
v-else-if="!instance.quarantined"
|
||||
v-tooltip="'Play'"
|
||||
:type="first ? 'colored' : 'base'"
|
||||
:color="first ? 'brand' : undefined"
|
||||
label="Play"
|
||||
@click="(e) => play(e, 'InstanceCard')"
|
||||
@mouseenter="checkProcess"
|
||||
>
|
||||
<!-- Translate for optical centering -->
|
||||
<PlayIcon class="translate-x-[1px]" />
|
||||
</IconButton>
|
||||
</div>
|
||||
<div class="flex items-center col-span-3 gap-1 text-secondary font-semibold">
|
||||
<TimerIcon />
|
||||
@@ -219,47 +226,51 @@ onUnmounted(() => unlisten())
|
||||
:class="`transition-all ${modLoading || installing ? `brightness-[0.25] scale-[0.85]` : `group-hover:brightness-75`}`"
|
||||
/>
|
||||
<div class="absolute inset-0 flex items-center justify-center">
|
||||
<ButtonStyled v-if="playing" size="large" color="red" circular>
|
||||
<button
|
||||
v-tooltip="'Stop'"
|
||||
:class="{ 'scale-100 opacity-100': playing }"
|
||||
class="transition-all scale-75 origin-bottom opacity-0 card-shadow"
|
||||
@click="(e) => stop(e, 'InstanceCard')"
|
||||
@mousehover="checkProcess"
|
||||
>
|
||||
<StopCircleIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<IconButton
|
||||
v-if="playing"
|
||||
v-tooltip="'Stop'"
|
||||
type="colored"
|
||||
color="red"
|
||||
size="xl"
|
||||
:label="'Stop'"
|
||||
:class="{ 'scale-100 opacity-100': playing }"
|
||||
class="transition-all scale-75 origin-bottom opacity-0 card-shadow"
|
||||
@click="(e) => stop(e, 'InstanceCard')"
|
||||
@mouseenter="checkProcess"
|
||||
>
|
||||
<StopCircleIcon />
|
||||
</IconButton>
|
||||
<SpinnerIcon
|
||||
v-else-if="modLoading || installing"
|
||||
v-tooltip="modLoading ? 'Instance is loading...' : 'Installing...'"
|
||||
class="animate-spin w-8 h-8"
|
||||
tabindex="-1"
|
||||
/>
|
||||
<ButtonStyled
|
||||
<IconButton
|
||||
v-else-if="!installed && !instance.quarantined"
|
||||
size="large"
|
||||
v-tooltip="'Repair'"
|
||||
type="colored"
|
||||
color="brand"
|
||||
circular
|
||||
size="xl"
|
||||
:label="'Repair'"
|
||||
class="transition-all scale-75 group-hover:scale-100 group-focus-within:scale-100 origin-bottom opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 card-shadow"
|
||||
@click="(e) => repair(e)"
|
||||
>
|
||||
<button
|
||||
v-tooltip="'Repair'"
|
||||
class="transition-all scale-75 group-hover:scale-100 group-focus-within:scale-100 origin-bottom opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 card-shadow"
|
||||
@click="(e) => repair(e)"
|
||||
>
|
||||
<DownloadIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else-if="!instance.quarantined" size="large" color="brand" circular>
|
||||
<button
|
||||
v-tooltip="'Play'"
|
||||
class="transition-all scale-75 group-hover:scale-100 group-focus-within:scale-100 origin-bottom opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 card-shadow"
|
||||
@click="(e) => play(e, 'InstanceCard')"
|
||||
@mousehover="checkProcess"
|
||||
>
|
||||
<PlayIcon class="translate-x-[2px]" />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<DownloadIcon />
|
||||
</IconButton>
|
||||
<IconButton
|
||||
v-else-if="!instance.quarantined"
|
||||
v-tooltip="'Play'"
|
||||
type="colored"
|
||||
color="brand"
|
||||
size="xl"
|
||||
:label="'Play'"
|
||||
class="transition-all scale-75 group-hover:scale-100 group-focus-within:scale-100 origin-bottom opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 card-shadow"
|
||||
@click="(e) => play(e, 'InstanceCard')"
|
||||
@mouseenter="checkProcess"
|
||||
>
|
||||
<PlayIcon class="translate-x-[2px]" />
|
||||
</IconButton>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-col gap-1">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script setup lang="ts">
|
||||
import { GameIcon, LeftArrowIcon } from '@modrinth/assets'
|
||||
import { Avatar, ButtonStyled, FormattedTag } from '@modrinth/ui'
|
||||
import { Avatar, ButtonLink, FormattedTag } from '@modrinth/ui'
|
||||
import { convertFileSrc } from '@tauri-apps/api/core'
|
||||
import { computed } from 'vue'
|
||||
|
||||
@@ -48,9 +48,7 @@ const instanceLink = computed(() => {
|
||||
</span>
|
||||
</span>
|
||||
</router-link>
|
||||
<ButtonStyled>
|
||||
<router-link :to="instanceLink"> <LeftArrowIcon /> Back to instance </router-link>
|
||||
</ButtonStyled>
|
||||
<ButtonLink :to="instanceLink"> <LeftArrowIcon /> Back to instance </ButtonLink>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -14,18 +14,14 @@
|
||||
</template>
|
||||
<template #cell-actions="{ row }">
|
||||
<div class="flex items-center justify-end">
|
||||
<ButtonStyled v-if="currentSelected.path === row.path">
|
||||
<button class="!shadow-none" disabled>
|
||||
<CheckIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.selected) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else>
|
||||
<button class="!shadow-none" @click="setJavaInstall(row)">
|
||||
<PlusIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.select) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button v-if="currentSelected.path === row.path" disabled>
|
||||
<CheckIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.selected) }}
|
||||
</Button>
|
||||
<Button v-else @click="setJavaInstall(row)">
|
||||
<PlusIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.select) }}
|
||||
</Button>
|
||||
</div>
|
||||
</template>
|
||||
<template #empty-state>
|
||||
@@ -35,28 +31,21 @@
|
||||
</template>
|
||||
</Table>
|
||||
<div class="flex justify-end">
|
||||
<ButtonStyled type="outlined">
|
||||
<button
|
||||
class="!shadow-none !border-surface-4 !border"
|
||||
@click="$refs.detectJavaModal.hide()"
|
||||
>
|
||||
<XIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.cancel) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button
|
||||
type="outlined"
|
||||
class="!border-surface-4 !border"
|
||||
@click="$refs.detectJavaModal.hide()"
|
||||
>
|
||||
<XIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.cancel) }}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</ModalWrapper>
|
||||
</template>
|
||||
<script setup>
|
||||
import { CheckIcon, PlusIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
defineMessages,
|
||||
injectNotificationManager,
|
||||
Table,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { Button, defineMessages, injectNotificationManager, Table, useVIntl } from '@modrinth/ui'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
|
||||
|
||||
@@ -17,64 +17,73 @@
|
||||
}
|
||||
"
|
||||
/>
|
||||
<ButtonStyled
|
||||
<Button
|
||||
type="quiet"
|
||||
:color="
|
||||
!hoveringTest && !testingJava
|
||||
? testingJavaSuccess === true
|
||||
? 'green'
|
||||
: 'red'
|
||||
: 'standard'
|
||||
: undefined
|
||||
"
|
||||
color-fill="text"
|
||||
:aria-label="formatMessage(messages.testJavaInstallation)"
|
||||
class="!text-[var(--legacy-button-color,var(--color-base))] [&>svg]:!text-[var(--legacy-button-color,var(--color-primary))]"
|
||||
:disabled="testingJava || props.disabled"
|
||||
:style="{
|
||||
'--legacy-button-color':
|
||||
(!hoveringTest && !testingJava
|
||||
? testingJavaSuccess === true
|
||||
? 'green'
|
||||
: 'red'
|
||||
: 'standard') &&
|
||||
(!hoveringTest && !testingJava
|
||||
? testingJavaSuccess === true
|
||||
? 'green'
|
||||
: 'red'
|
||||
: 'standard') !== 'standard'
|
||||
? `var(--color-${
|
||||
!hoveringTest && !testingJava
|
||||
? testingJavaSuccess === true
|
||||
? 'green'
|
||||
: 'red'
|
||||
: 'standard'
|
||||
})`
|
||||
: undefined,
|
||||
}"
|
||||
@click="runTest(props.modelValue?.path)"
|
||||
@mouseenter="!props.disabled && (hoveringTest = true)"
|
||||
@mouseleave="hoveringTest = false"
|
||||
>
|
||||
<button
|
||||
:aria-label="formatMessage(messages.testJavaInstallation)"
|
||||
class="!shadow-none"
|
||||
:disabled="testingJava || props.disabled"
|
||||
@click="runTest(props.modelValue?.path)"
|
||||
@mouseenter="!props.disabled && (hoveringTest = true)"
|
||||
@mouseleave="hoveringTest = false"
|
||||
>
|
||||
<SpinnerIcon v-if="testingJava" class="animate-spin h-4 w-4" />
|
||||
<CheckCircleIcon
|
||||
v-else-if="testingJavaSuccess === true && !hoveringTest"
|
||||
class="h-4 w-4"
|
||||
/>
|
||||
<XCircleIcon v-else-if="testingJavaSuccess !== true && !hoveringTest" class="h-4 w-4" />
|
||||
<RefreshCwIcon v-else-if="!props.disabled" class="h-4 w-4" />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<SpinnerIcon v-if="testingJava" class="animate-spin h-4 w-4" />
|
||||
<CheckCircleIcon v-else-if="testingJavaSuccess === true && !hoveringTest" class="h-4 w-4" />
|
||||
<XCircleIcon v-else-if="testingJavaSuccess !== true && !hoveringTest" class="h-4 w-4" />
|
||||
<RefreshCwIcon v-else-if="!props.disabled" class="h-4 w-4" />
|
||||
</Button>
|
||||
</div>
|
||||
<span class="installation-buttons">
|
||||
<ButtonStyled v-if="props.version">
|
||||
<button
|
||||
v-tooltip="
|
||||
testingJavaSuccess === true ? formatMessage(messages.alreadyInstalled) : undefined
|
||||
"
|
||||
class="!shadow-none"
|
||||
:disabled="props.disabled || installingJava || testingJavaSuccess === true"
|
||||
@click="reinstallJava"
|
||||
>
|
||||
<DownloadIcon />
|
||||
{{
|
||||
installingJava
|
||||
? formatMessage(messages.installing)
|
||||
: formatMessage(messages.installRecommended)
|
||||
}}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<button class="!shadow-none" :disabled="props.disabled" @click="autoDetect">
|
||||
<SearchIcon />
|
||||
{{ formatMessage(messages.detect) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<button class="!shadow-none" :disabled="props.disabled" @click="handleJavaFileInput()">
|
||||
<FolderSearchIcon />
|
||||
{{ formatMessage(messages.browse) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button
|
||||
v-if="props.version"
|
||||
v-tooltip="
|
||||
testingJavaSuccess === true ? formatMessage(messages.alreadyInstalled) : undefined
|
||||
"
|
||||
:disabled="props.disabled || installingJava || testingJavaSuccess === true"
|
||||
@click="reinstallJava"
|
||||
>
|
||||
<DownloadIcon />
|
||||
{{
|
||||
installingJava
|
||||
? formatMessage(messages.installing)
|
||||
: formatMessage(messages.installRecommended)
|
||||
}}
|
||||
</Button>
|
||||
<Button :disabled="props.disabled" @click="autoDetect">
|
||||
<SearchIcon />
|
||||
{{ formatMessage(messages.detect) }}
|
||||
</Button>
|
||||
<Button :disabled="props.disabled" @click="handleJavaFileInput()">
|
||||
<FolderSearchIcon />
|
||||
{{ formatMessage(messages.browse) }}
|
||||
</Button>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
@@ -90,7 +99,7 @@ import {
|
||||
XCircleIcon,
|
||||
} from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
Button,
|
||||
defineMessages,
|
||||
injectNotificationManager,
|
||||
StyledInput,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script setup>
|
||||
import { CheckIcon } from '@modrinth/assets'
|
||||
import { Badge, ButtonStyled } from '@modrinth/ui'
|
||||
import { Badge, IconButton } from '@modrinth/ui'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
import { SwapIcon } from '@/assets/icons/index.js'
|
||||
@@ -74,18 +74,16 @@ const onHide = () => {
|
||||
@click="$router.push(`/project/${version.project_id}/version/${version.id}`)"
|
||||
>
|
||||
<div class="table-cell table-text">
|
||||
<ButtonStyled
|
||||
circular
|
||||
:color="version.id === installedVersion ? 'standard' : 'brand'"
|
||||
<IconButton
|
||||
:type="version.id === installedVersion ? 'base' : 'colored'"
|
||||
:color="version.id === installedVersion ? undefined : 'brand'"
|
||||
label="Switch version"
|
||||
:disabled="inProgress || installing || version.id === installedVersion"
|
||||
@click.stop="() => switchVersion(version.id)"
|
||||
>
|
||||
<button
|
||||
:disabled="inProgress || installing || version.id === installedVersion"
|
||||
@click.stop="() => switchVersion(version.id)"
|
||||
>
|
||||
<SwapIcon v-if="version.id !== installedVersion" />
|
||||
<CheckIcon v-else />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<SwapIcon v-if="version.id !== installedVersion" />
|
||||
<CheckIcon v-else />
|
||||
</IconButton>
|
||||
</div>
|
||||
<div class="name-cell table-cell table-text">
|
||||
<div class="version-link">
|
||||
|
||||
@@ -9,6 +9,7 @@ import { computed, onMounted, onUnmounted, ref } from 'vue'
|
||||
import NavButton from '@/components/ui/NavButton.vue'
|
||||
import { instance_listener } from '@/helpers/events.js'
|
||||
import { list } from '@/helpers/instance'
|
||||
import { instanceKeys } from '@/pages/instance/query-options'
|
||||
|
||||
const ITEM_SIZE = 52
|
||||
const APPROX_USED_VERTICAL_SPACE = 513 // doesn't need to be exact lol just close enough so there's a little gap and no overflow
|
||||
@@ -123,7 +124,7 @@ const getInstances = async () => {
|
||||
const instances = await list().catch(handleError)
|
||||
|
||||
for (const instance of instances) {
|
||||
queryClient.setQueryData(['instances', 'summary', instance.id], instance)
|
||||
queryClient.setQueryData(instanceKeys.detail(instance.id), instance)
|
||||
}
|
||||
|
||||
allInstances.value = instances.sort((a, b) => {
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
<script setup lang="ts">
|
||||
import { NotepadTextIcon, XIcon } from '@modrinth/assets'
|
||||
import { ButtonStyled, defineMessages, injectNotificationManager, useVIntl } from '@modrinth/ui'
|
||||
import { Button, defineMessages, injectNotificationManager, useVIntl } from '@modrinth/ui'
|
||||
import { type } from '@tauri-apps/plugin-os'
|
||||
import { $fetch } from 'ofetch'
|
||||
import { onMounted, ref } from 'vue'
|
||||
import { onMounted, onUnmounted, ref } from 'vue'
|
||||
|
||||
import { hide_ads_window, show_ads_window } from '@/helpers/ads.js'
|
||||
import { release_ads_window_hold, take_ads_window_hold } from '@/helpers/ads.js'
|
||||
import { list } from '@/helpers/instance'
|
||||
import { get as getCreds } from '@/helpers/mr_auth.ts'
|
||||
|
||||
let adsWindowHold = false
|
||||
|
||||
type Survey = {
|
||||
id: string
|
||||
tally_id: string
|
||||
@@ -92,30 +94,44 @@ async function openSurvey() {
|
||||
onOpen: () => console.info('Opened user survey'),
|
||||
onClose: () => {
|
||||
console.info('Closed user survey')
|
||||
show_ads_window()
|
||||
if (adsWindowHold) {
|
||||
adsWindowHold = false
|
||||
release_ads_window_hold()
|
||||
}
|
||||
},
|
||||
onSubmit: () => console.info('Active user survey submitted'),
|
||||
}
|
||||
|
||||
try {
|
||||
hide_ads_window()
|
||||
await take_ads_window_hold()
|
||||
adsWindowHold = true
|
||||
if (tallyWindow.Tally?.openPopup) {
|
||||
console.info(`Opening Tally popup for user survey (form ID: ${formId})`)
|
||||
dismissSurvey()
|
||||
tallyWindow.Tally.openPopup(formId, popupOptions)
|
||||
} else {
|
||||
console.warn('Tally script not yet loaded')
|
||||
show_ads_window()
|
||||
adsWindowHold = false
|
||||
await release_ads_window_hold()
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Error opening Tally popup:', e)
|
||||
show_ads_window()
|
||||
if (adsWindowHold) {
|
||||
adsWindowHold = false
|
||||
await release_ads_window_hold()
|
||||
}
|
||||
}
|
||||
|
||||
console.info(`Found user survey to show with tally_id: ${formId}`)
|
||||
tallyWindow.Tally?.openPopup(formId, popupOptions)
|
||||
}
|
||||
|
||||
onUnmounted(() => {
|
||||
if (adsWindowHold) {
|
||||
adsWindowHold = false
|
||||
release_ads_window_hold()
|
||||
}
|
||||
})
|
||||
|
||||
function dismissSurvey() {
|
||||
if (!availableSurvey.value) return
|
||||
localStorage.setItem(`survey-${availableSurvey.value.id}-display`, String(new Date()))
|
||||
@@ -193,18 +209,14 @@ onMounted(async () => {
|
||||
{{ formatMessage(messages.surveyFooter) }}
|
||||
</p>
|
||||
<div class="flex gap-2">
|
||||
<ButtonStyled color="brand">
|
||||
<button @click="openSurvey">
|
||||
<NotepadTextIcon />
|
||||
{{ formatMessage(messages.takeSurvey) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<button @click="dismissSurvey">
|
||||
<XIcon />
|
||||
{{ formatMessage(messages.surveyNoThanks) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="colored" color="brand" @click="openSurvey">
|
||||
<NotepadTextIcon />
|
||||
{{ formatMessage(messages.takeSurvey) }}
|
||||
</Button>
|
||||
<Button @click="dismissSurvey">
|
||||
<XIcon />
|
||||
{{ formatMessage(messages.surveyNoThanks) }}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<script setup>
|
||||
import { ButtonStyled, injectNotificationManager, ProjectCard } from '@modrinth/ui'
|
||||
import { Button, injectNotificationManager, ProjectCard } from '@modrinth/ui'
|
||||
import { ref } from 'vue'
|
||||
|
||||
import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
|
||||
@@ -69,9 +69,7 @@ async function install() {
|
||||
</p>
|
||||
</div>
|
||||
<div class="button-group">
|
||||
<ButtonStyled color="brand">
|
||||
<button @click="install">Install</button>
|
||||
</ButtonStyled>
|
||||
<Button type="colored" color="brand" @click="install">Install</Button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4,34 +4,37 @@
|
||||
class="flex items-center gap-2 mr-1.5"
|
||||
data-tauri-drag-region-exclude
|
||||
>
|
||||
<ButtonStyled type="transparent" circular>
|
||||
<button class="relative expanded-button" @click="() => getCurrentWindow().minimize()">
|
||||
<MinimizeIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled type="transparent" circular>
|
||||
<button class="relative expanded-button" @click="() => getCurrentWindow().toggleMaximize()">
|
||||
<RestoreIcon v-if="isMaximized" />
|
||||
<MaximizeIcon v-else />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled
|
||||
type="transparent"
|
||||
color="red"
|
||||
color-fill="none"
|
||||
hover-color-fill="background"
|
||||
circular
|
||||
<IconButton
|
||||
type="quiet"
|
||||
label="Minimize window"
|
||||
class="relative expanded-button"
|
||||
@click="() => getCurrentWindow().minimize()"
|
||||
>
|
||||
<button class="relative expanded-button close-button" @click="handleClose">
|
||||
<XIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<MinimizeIcon />
|
||||
</IconButton>
|
||||
<IconButton
|
||||
type="quiet"
|
||||
label="Toggle maximize window"
|
||||
class="relative expanded-button"
|
||||
@click="() => getCurrentWindow().toggleMaximize()"
|
||||
>
|
||||
<RestoreIcon v-if="isMaximized" />
|
||||
<MaximizeIcon v-else />
|
||||
</IconButton>
|
||||
<IconButton
|
||||
type="quiet"
|
||||
label="Close window"
|
||||
class="relative expanded-button close-button"
|
||||
@click="handleClose"
|
||||
>
|
||||
<XIcon />
|
||||
</IconButton>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { MaximizeIcon, MinimizeIcon, RestoreIcon, XIcon } from '@modrinth/assets'
|
||||
import { ButtonStyled } from '@modrinth/ui'
|
||||
import { IconButton } from '@modrinth/ui'
|
||||
import { getCurrentWindow } from '@tauri-apps/api/window'
|
||||
import { saveWindowState, StateFlags } from '@tauri-apps/plugin-window-state'
|
||||
import { computed, onMounted, onUnmounted, ref } from 'vue'
|
||||
|
||||
@@ -1,31 +1,30 @@
|
||||
<template>
|
||||
<ButtonStyled color="brand" type="outlined" hover-color-fill="background">
|
||||
<button
|
||||
v-if="showUpdatePill"
|
||||
type="button"
|
||||
class="!h-[34px] text-sm !transition-[opacity,transform,background-color,color,filter] !duration-200 ease-out"
|
||||
:class="{
|
||||
'opacity-0 scale-[0.96]': finishedDownloading && !animateReadyPill,
|
||||
'opacity-100 scale-100': finishedDownloading && animateReadyPill,
|
||||
}"
|
||||
:disabled="isUpdateDownloading"
|
||||
:aria-busy="isUpdateDownloading"
|
||||
@click="handleUpdateClick"
|
||||
>
|
||||
<RefreshCwIcon v-if="finishedDownloading" :class="{ 'animate-spin': restarting }" />
|
||||
<DownloadIcon v-else />
|
||||
<span v-if="isUpdateDownloading">
|
||||
{{ formatMessage(messages.downloadingUpdate) }}
|
||||
<span class="inline-block w-[3ch] text-right tabular-nums">{{ downloadPercent }}%</span>
|
||||
</span>
|
||||
<span v-else>{{ updateLabel }}</span>
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button
|
||||
v-if="showUpdatePill"
|
||||
type="outlined"
|
||||
native-type="button"
|
||||
class="!h-[34px] text-sm !transition-[opacity,transform,background-color,color,filter] !duration-200 ease-out !text-brand [&>svg]:!text-brand !shadow-[inset_0_0_0_1px_var(--color-brand)] hover:!bg-brand focus-visible:!bg-brand hover:!text-[var(--color-accent-contrast)] focus-visible:!text-[var(--color-accent-contrast)]"
|
||||
:class="{
|
||||
'opacity-0 scale-[0.96]': finishedDownloading && !animateReadyPill,
|
||||
'opacity-100 scale-100': finishedDownloading && animateReadyPill,
|
||||
}"
|
||||
:disabled="isUpdateDownloading"
|
||||
:aria-busy="isUpdateDownloading"
|
||||
@click="handleUpdateClick"
|
||||
>
|
||||
<RefreshCwIcon v-if="finishedDownloading" :class="{ 'animate-spin': restarting }" />
|
||||
<DownloadIcon v-else />
|
||||
<span v-if="isUpdateDownloading">
|
||||
{{ formatMessage(messages.downloadingUpdate) }}
|
||||
<span class="inline-block w-[3ch] text-right tabular-nums">{{ downloadPercent }}%</span>
|
||||
</span>
|
||||
<span v-else>{{ updateLabel }}</span>
|
||||
</Button>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { DownloadIcon, RefreshCwIcon } from '@modrinth/assets'
|
||||
import { ButtonStyled, defineMessages, useVIntl } from '@modrinth/ui'
|
||||
import { Button, defineMessages, useVIntl } from '@modrinth/ui'
|
||||
import { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue'
|
||||
|
||||
import {
|
||||
|
||||
@@ -2,8 +2,9 @@
|
||||
import { MailIcon, SearchIcon, SendIcon, UserIcon, UserPlusIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
Button,
|
||||
defineMessages,
|
||||
IconButton,
|
||||
injectNotificationManager,
|
||||
IntlFormatted,
|
||||
StyledInput,
|
||||
@@ -17,17 +18,40 @@ import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
|
||||
import { useFriends } from '@/composables/use-friends'
|
||||
import type { FriendWithUserData } from '@/helpers/friends.ts'
|
||||
import type { ModrinthCredentials } from '@/helpers/mr_auth'
|
||||
import { get as getSettings, set as setSettings } from '@/helpers/settings.ts'
|
||||
import { useTheming } from '@/store/state'
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const { handleError } = injectNotificationManager()
|
||||
const formatRelativeTime = useRelativeTime()
|
||||
const themeStore = useTheming()
|
||||
|
||||
const props = defineProps<{
|
||||
credentials: ModrinthCredentials | null
|
||||
signIn: () => void
|
||||
}>()
|
||||
|
||||
type FriendsSectionCollapsedFlag =
|
||||
| 'friends_active_collapsed'
|
||||
| 'friends_online_collapsed'
|
||||
| 'friends_offline_collapsed'
|
||||
| 'friends_pending_collapsed'
|
||||
|
||||
function isFriendsSectionCollapsed(flag: FriendsSectionCollapsedFlag) {
|
||||
return themeStore.getFeatureFlag(flag)
|
||||
}
|
||||
|
||||
function setFriendsSectionCollapsed(flag: FriendsSectionCollapsedFlag, collapsed: boolean) {
|
||||
themeStore.featureFlags[flag] = collapsed
|
||||
getSettings()
|
||||
.then((settings) => {
|
||||
settings.feature_flags[flag] = collapsed
|
||||
return setSettings(settings)
|
||||
})
|
||||
.catch(handleError)
|
||||
}
|
||||
|
||||
const userCredentials = computed(() => props.credentials)
|
||||
const {
|
||||
friends: userFriends,
|
||||
@@ -197,26 +221,20 @@ const messages = defineMessages({
|
||||
</div>
|
||||
<div class="flex gap-2">
|
||||
<template v-if="friend.id === userCredentials?.user_id">
|
||||
<ButtonStyled color="brand">
|
||||
<button @click="addFriend(friend)">
|
||||
<UserPlusIcon />
|
||||
Accept
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<button @click="removeFriend(friend)">
|
||||
<XIcon />
|
||||
Ignore
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="colored" color="brand" @click="addFriend(friend)">
|
||||
<UserPlusIcon />
|
||||
Accept
|
||||
</Button>
|
||||
<Button @click="removeFriend(friend)">
|
||||
<XIcon />
|
||||
Ignore
|
||||
</Button>
|
||||
</template>
|
||||
<template v-else>
|
||||
<ButtonStyled>
|
||||
<button @click="removeFriend(friend)">
|
||||
<XIcon />
|
||||
Cancel
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button @click="removeFriend(friend)">
|
||||
<XIcon />
|
||||
Cancel
|
||||
</Button>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
@@ -240,26 +258,28 @@ const messages = defineMessages({
|
||||
wrapper-class="flex-1"
|
||||
@keyup.enter="addFriendFromModal"
|
||||
/>
|
||||
<ButtonStyled color="brand">
|
||||
<button :disabled="username.length === 0" @click="addFriendFromModal">
|
||||
<SendIcon />
|
||||
{{ formatMessage(messages.sendFriendRequest) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button
|
||||
type="colored"
|
||||
color="brand"
|
||||
:disabled="username.length === 0"
|
||||
@click="addFriendFromModal"
|
||||
>
|
||||
<SendIcon />
|
||||
{{ formatMessage(messages.sendFriendRequest) }}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</ModalWrapper>
|
||||
<div v-if="userCredentials && !loading" class="flex gap-1 items-center mb-3 -ml-1">
|
||||
<template v-if="sortedFriends.length > 0">
|
||||
<ButtonStyled circular type="transparent">
|
||||
<button
|
||||
v-tooltip="formatMessage(messages.addFriend)"
|
||||
:aria-label="formatMessage(messages.addFriend)"
|
||||
@click="addFriendModal.show"
|
||||
>
|
||||
<UserPlusIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<IconButton
|
||||
v-tooltip="formatMessage(messages.addFriend)"
|
||||
type="quiet"
|
||||
:label="formatMessage(messages.addFriend)"
|
||||
@click="addFriendModal.show"
|
||||
>
|
||||
<UserPlusIcon />
|
||||
</IconButton>
|
||||
<StyledInput
|
||||
v-model="search"
|
||||
:icon="SearchIcon"
|
||||
@@ -274,23 +294,23 @@ const messages = defineMessages({
|
||||
<h3 v-else class="w-full text-base text-primary font-medium m-0">
|
||||
{{ formatMessage(messages.friends) }}
|
||||
</h3>
|
||||
<ButtonStyled v-if="incomingRequests.length > 0" circular type="transparent">
|
||||
<button
|
||||
v-tooltip="formatMessage(messages.viewFriendRequests, { count: incomingRequests.length })"
|
||||
class="relative"
|
||||
:aria-label="formatMessage(messages.viewFriendRequests, { count: incomingRequests.length })"
|
||||
@click="friendInvitesModal.show"
|
||||
<IconButton
|
||||
v-if="incomingRequests.length > 0"
|
||||
v-tooltip="formatMessage(messages.viewFriendRequests, { count: incomingRequests.length })"
|
||||
type="quiet"
|
||||
:label="formatMessage(messages.viewFriendRequests, { count: incomingRequests.length })"
|
||||
class="relative"
|
||||
@click="friendInvitesModal.show"
|
||||
>
|
||||
<MailIcon />
|
||||
<span
|
||||
v-if="incomingRequests.length > 0"
|
||||
aria-hidden="true"
|
||||
class="absolute bg-brand text-brand-inverted text-[8px] top-0.5 px-1 right-0.5 min-w-3 h-3 rounded-full flex items-center justify-center font-bold"
|
||||
>
|
||||
<MailIcon />
|
||||
<span
|
||||
v-if="incomingRequests.length > 0"
|
||||
aria-hidden="true"
|
||||
class="absolute bg-brand text-brand-inverted text-[8px] top-0.5 px-1 right-0.5 min-w-3 h-3 rounded-full flex items-center justify-center font-bold"
|
||||
>
|
||||
{{ incomingRequests.length }}
|
||||
</span>
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
{{ incomingRequests.length }}
|
||||
</span>
|
||||
</IconButton>
|
||||
</div>
|
||||
<div class="flex flex-col gap-3">
|
||||
<h3 v-if="loading" class="text-base text-primary font-medium m-0">
|
||||
@@ -331,33 +351,42 @@ const messages = defineMessages({
|
||||
<FriendsSection
|
||||
v-if="activeFriends.length > 0"
|
||||
:is-searching="!!search"
|
||||
open-by-default
|
||||
:open-by-default="!isFriendsSectionCollapsed('friends_active_collapsed')"
|
||||
:friends="activeFriends"
|
||||
:heading="formatMessage(messages.active)"
|
||||
:remove-friend="removeFriend"
|
||||
@on-open="setFriendsSectionCollapsed('friends_active_collapsed', false)"
|
||||
@on-close="setFriendsSectionCollapsed('friends_active_collapsed', true)"
|
||||
/>
|
||||
<FriendsSection
|
||||
v-if="onlineFriends.length > 0"
|
||||
:is-searching="!!search"
|
||||
open-by-default
|
||||
:open-by-default="!isFriendsSectionCollapsed('friends_online_collapsed')"
|
||||
:friends="onlineFriends"
|
||||
:heading="formatMessage(messages.online)"
|
||||
:remove-friend="removeFriend"
|
||||
@on-open="setFriendsSectionCollapsed('friends_online_collapsed', false)"
|
||||
@on-close="setFriendsSectionCollapsed('friends_online_collapsed', true)"
|
||||
/>
|
||||
<FriendsSection
|
||||
v-if="offlineFriends.length > 0"
|
||||
:is-searching="!!search"
|
||||
:open-by-default="activeFriends.length + onlineFriends.length < 3"
|
||||
:open-by-default="!isFriendsSectionCollapsed('friends_offline_collapsed')"
|
||||
:friends="offlineFriends"
|
||||
:heading="formatMessage(messages.offline)"
|
||||
:remove-friend="removeFriend"
|
||||
@on-open="setFriendsSectionCollapsed('friends_offline_collapsed', false)"
|
||||
@on-close="setFriendsSectionCollapsed('friends_offline_collapsed', true)"
|
||||
/>
|
||||
<FriendsSection
|
||||
v-if="pendingFriends.length > 0"
|
||||
:is-searching="!!search"
|
||||
:open-by-default="!isFriendsSectionCollapsed('friends_pending_collapsed')"
|
||||
:friends="pendingFriends"
|
||||
:heading="formatMessage(messages.pending)"
|
||||
:remove-friend="removeFriend"
|
||||
@on-open="setFriendsSectionCollapsed('friends_pending_collapsed', false)"
|
||||
@on-close="setFriendsSectionCollapsed('friends_pending_collapsed', true)"
|
||||
/>
|
||||
<p v-if="filteredFriends.length === 0 && search" class="text-sm text-secondary my-1 mx-4">
|
||||
{{ formatMessage(messages.noFriendsMatch, { query: search }) }}
|
||||
|
||||
@@ -3,9 +3,9 @@ import { MoreVerticalIcon, TrashIcon, UserIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
Accordion,
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
defineMessages,
|
||||
OverflowMenu,
|
||||
IconButton,
|
||||
TeleportOverflowMenu,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { useTemplateRef } from 'vue'
|
||||
@@ -31,6 +31,11 @@ const props = withDefaults(
|
||||
},
|
||||
)
|
||||
|
||||
const emit = defineEmits<{
|
||||
onOpen: []
|
||||
onClose: []
|
||||
}>()
|
||||
|
||||
function createContextMenuOptions(friend: FriendWithUserData) {
|
||||
if (friend.accepted) {
|
||||
return [
|
||||
@@ -112,6 +117,8 @@ const messages = defineMessages({
|
||||
? ''
|
||||
: ' cursor-pointer hover:brightness-[--hover-brightness] active:scale-[0.98] transition-all')
|
||||
"
|
||||
@on-open="emit('onOpen')"
|
||||
@on-close="emit('onClose')"
|
||||
>
|
||||
<template #title>
|
||||
<h3 class="text-base text-primary font-medium m-0">
|
||||
@@ -159,29 +166,35 @@ const messages = defineMessages({
|
||||
<span v-else-if="friend.status" class="m-0 text-xs">{{ friend.status }}</span>
|
||||
</div>
|
||||
</RouterLink>
|
||||
<ButtonStyled v-if="friend.accepted" circular type="transparent">
|
||||
<OverflowMenu
|
||||
class="opacity-0 group-hover:opacity-100 transition-opacity"
|
||||
:options="[
|
||||
{
|
||||
id: 'remove-friend',
|
||||
action: () => removeFriend(friend),
|
||||
color: 'red',
|
||||
},
|
||||
]"
|
||||
>
|
||||
<MoreVerticalIcon />
|
||||
<template #remove-friend>
|
||||
<TrashIcon />
|
||||
{{ formatMessage(messages.removeFriend) }}
|
||||
</template>
|
||||
</OverflowMenu>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else type="transparent" circular>
|
||||
<button v-tooltip="formatMessage(messages.cancelRequest)" @click="removeFriend(friend)">
|
||||
<XIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<TeleportOverflowMenu
|
||||
v-if="friend.accepted"
|
||||
type="quiet"
|
||||
label="More options"
|
||||
class="opacity-0 group-hover:opacity-100 transition-opacity"
|
||||
:options="[
|
||||
{
|
||||
id: 'remove-friend',
|
||||
label: formatMessage(messages.removeFriend),
|
||||
action: () => removeFriend(friend),
|
||||
tone: 'red',
|
||||
},
|
||||
]"
|
||||
>
|
||||
<MoreVerticalIcon />
|
||||
<template #remove-friend>
|
||||
<TrashIcon />
|
||||
{{ formatMessage(messages.removeFriend) }}
|
||||
</template>
|
||||
</TeleportOverflowMenu>
|
||||
<IconButton
|
||||
v-else
|
||||
v-tooltip="formatMessage(messages.cancelRequest)"
|
||||
type="quiet"
|
||||
:label="formatMessage(messages.cancelRequest)"
|
||||
@click="removeFriend(friend)"
|
||||
>
|
||||
<XIcon />
|
||||
</IconButton>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -1,12 +1,6 @@
|
||||
<script setup>
|
||||
import { CheckIcon, PlusIcon, SearchIcon } from '@modrinth/assets'
|
||||
import {
|
||||
Admonition,
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
injectNotificationManager,
|
||||
StyledInput,
|
||||
} from '@modrinth/ui'
|
||||
import { Admonition, Avatar, Button, injectNotificationManager, StyledInput } from '@modrinth/ui'
|
||||
import { useQueryClient } from '@tanstack/vue-query'
|
||||
import { convertFileSrc } from '@tauri-apps/api/core'
|
||||
import { computed, ref } from 'vue'
|
||||
@@ -15,6 +9,7 @@ import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue'
|
||||
import { trackEvent } from '@/helpers/analytics'
|
||||
import { list } from '@/helpers/instance'
|
||||
import { add_server_to_instance, get_instance_worlds } from '@/helpers/worlds.ts'
|
||||
import { instanceKeys } from '@/pages/instance/query-options'
|
||||
|
||||
const { handleError } = injectNotificationManager()
|
||||
const queryClient = useQueryClient()
|
||||
@@ -67,7 +62,7 @@ async function addServer(instance) {
|
||||
try {
|
||||
await add_server_to_instance(instance.id, serverName.value, serverAddress.value, 'prompt')
|
||||
instance.added = true
|
||||
await queryClient.invalidateQueries({ queryKey: ['worlds', instance.id] })
|
||||
await queryClient.invalidateQueries({ queryKey: instanceKeys.worlds(instance.id) })
|
||||
|
||||
trackEvent('AddServerToInstance', {
|
||||
server_name: serverName.value,
|
||||
@@ -109,19 +104,15 @@ async function addServer(instance) {
|
||||
/>
|
||||
{{ instance.name }}
|
||||
</router-link>
|
||||
<ButtonStyled>
|
||||
<button :disabled="instance.added || instance.adding" @click="addServer(instance)">
|
||||
<PlusIcon v-if="!instance.added && !instance.adding" />
|
||||
<CheckIcon v-else-if="instance.added" />
|
||||
{{ instance.adding ? 'Adding...' : instance.added ? 'Added' : 'Add' }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button :disabled="instance.added || instance.adding" @click="addServer(instance)">
|
||||
<PlusIcon v-if="!instance.added && !instance.adding" />
|
||||
<CheckIcon v-else-if="instance.added" />
|
||||
{{ instance.adding ? 'Adding...' : instance.added ? 'Added' : 'Add' }}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-group push-right">
|
||||
<ButtonStyled>
|
||||
<button @click="modal.hide()">Cancel</button>
|
||||
</ButtonStyled>
|
||||
<Button @click="modal.hide()">Cancel</Button>
|
||||
</div>
|
||||
</div>
|
||||
</ModalWrapper>
|
||||
|
||||
+23
-29
@@ -7,10 +7,9 @@ import {
|
||||
MessagesSquareIcon,
|
||||
WrenchIcon,
|
||||
} from '@modrinth/assets'
|
||||
import { Admonition, ButtonStyled, Collapsible, NewModal } from '@modrinth/ui'
|
||||
import { Admonition, Button, ButtonLink, Collapsible, IconButton, NewModal } from '@modrinth/ui'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
import { hide_ads_window, show_ads_window } from '@/helpers/ads.js'
|
||||
import { login as login_flow, set_default_user } from '@/helpers/auth.js'
|
||||
import { handleSevereError } from '@/store/error.js'
|
||||
|
||||
@@ -29,19 +28,13 @@ function show(errorVal: { message?: string }) {
|
||||
matchedError.value = findMinecraftAuthError(rawError.value)
|
||||
|
||||
debugCollapsed.value = true
|
||||
hide_ads_window()
|
||||
modal.value?.show()
|
||||
}
|
||||
|
||||
function hide() {
|
||||
onModalHide()
|
||||
modal.value?.hide()
|
||||
}
|
||||
|
||||
function onModalHide() {
|
||||
show_ads_window()
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
show,
|
||||
hide,
|
||||
@@ -74,7 +67,7 @@ async function copyToClipboard(text: string) {
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<NewModal ref="modal" header="Sign in Failed" :max-width="'548px'" @hide="onModalHide">
|
||||
<NewModal ref="modal" header="Sign in Failed" :max-width="'548px'">
|
||||
<div class="flex flex-col gap-6">
|
||||
<Admonition
|
||||
type="warning"
|
||||
@@ -137,16 +130,18 @@ async function copyToClipboard(text: string) {
|
||||
|
||||
<!-- Action buttons -->
|
||||
<div class="flex items-center gap-2">
|
||||
<ButtonStyled>
|
||||
<a href="https://support.modrinth.com" class="!w-full" @click="modal?.hide()">
|
||||
<MessagesSquareIcon /> Contact support
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button :disabled="loadingSignIn" class="!w-full" @click="signInAgain">
|
||||
<LogInIcon /> Sign in again
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonLink href="https://support.modrinth.com" class="!w-full" @click="modal?.hide()">
|
||||
<MessagesSquareIcon /> Contact support
|
||||
</ButtonLink>
|
||||
<Button
|
||||
type="colored"
|
||||
color="brand"
|
||||
:disabled="loadingSignIn"
|
||||
class="!w-full"
|
||||
@click="signInAgain"
|
||||
>
|
||||
<LogInIcon /> Sign in again
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<div class="flex flex-col gap-2">
|
||||
@@ -176,16 +171,15 @@ async function copyToClipboard(text: string) {
|
||||
>
|
||||
{{ debugInfo }}
|
||||
</div>
|
||||
<ButtonStyled circular>
|
||||
<button
|
||||
v-tooltip="'Copy debug info'"
|
||||
:disabled="copied"
|
||||
@click="copyToClipboard(debugInfo)"
|
||||
>
|
||||
<template v-if="copied"> <CheckIcon class="text-green" /> </template>
|
||||
<template v-else> <CopyIcon /> </template>
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<IconButton
|
||||
v-tooltip="'Copy debug info'"
|
||||
:label="'Copy debug info'"
|
||||
:disabled="copied"
|
||||
@click="copyToClipboard(debugInfo)"
|
||||
>
|
||||
<template v-if="copied"> <CheckIcon class="text-green" /> </template>
|
||||
<template v-else> <CopyIcon /> </template>
|
||||
</IconButton>
|
||||
</div>
|
||||
</Collapsible>
|
||||
</div>
|
||||
|
||||
+23
-34
@@ -20,39 +20,28 @@
|
||||
</div>
|
||||
|
||||
<div class="flex flex-col gap-6 px-6 pb-6">
|
||||
<div class="flex justify-end gap-2">
|
||||
<ButtonStyled>
|
||||
<a class="w-full !shadow-none" href="https://support.modrinth.com" @click="modal?.hide()">
|
||||
<MessagesSquareIcon />
|
||||
{{ formatMessage(messages.getSupport) }}
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button class="w-full !shadow-none" :disabled="loadingSignIn" @click="signIn">
|
||||
<SpinnerIcon v-if="loadingSignIn" class="animate-spin" />
|
||||
<svg
|
||||
v-else
|
||||
width="20"
|
||||
height="20"
|
||||
viewBox="0 0 20 20"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<rect width="9.25" height="9.25" fill="black" fill-opacity="0.9" />
|
||||
<rect x="10.75" width="9.25" height="9.25" fill="black" fill-opacity="0.9" />
|
||||
<rect y="10.75" width="9.25" height="9.25" fill="black" fill-opacity="0.9" />
|
||||
<rect
|
||||
x="10.75"
|
||||
y="10.75"
|
||||
width="9.25"
|
||||
height="9.25"
|
||||
fill="black"
|
||||
fill-opacity="0.9"
|
||||
/>
|
||||
</svg>
|
||||
{{ formatMessage(messages.signIn) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<div class="grid grid-cols-2 gap-2">
|
||||
<ButtonLink href="https://support.modrinth.com" @click="modal?.hide()">
|
||||
<MessagesSquareIcon />
|
||||
{{ formatMessage(messages.getSupport) }}
|
||||
</ButtonLink>
|
||||
<Button type="colored" color="brand" :disabled="loadingSignIn" @click="signIn">
|
||||
<SpinnerIcon v-if="loadingSignIn" class="animate-spin" />
|
||||
<svg
|
||||
v-else
|
||||
width="20"
|
||||
height="20"
|
||||
viewBox="0 0 20 20"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<rect width="9.25" height="9.25" fill="black" fill-opacity="0.9" />
|
||||
<rect x="10.75" width="9.25" height="9.25" fill="black" fill-opacity="0.9" />
|
||||
<rect y="10.75" width="9.25" height="9.25" fill="black" fill-opacity="0.9" />
|
||||
<rect x="10.75" y="10.75" width="9.25" height="9.25" fill="black" fill-opacity="0.9" />
|
||||
</svg>
|
||||
{{ formatMessage(messages.signIn) }}
|
||||
</Button>
|
||||
</div>
|
||||
<p class="m-0 text-center text-sm text-secondary">
|
||||
{{ formatMessage(messages.dontHaveAccount) }}
|
||||
@@ -69,7 +58,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { MessagesSquareIcon, SpinnerIcon } from '@modrinth/assets'
|
||||
import { ButtonStyled, defineMessages, NewModal, useVIntl } from '@modrinth/ui'
|
||||
import { Button, ButtonLink, defineMessages, NewModal, useVIntl } from '@modrinth/ui'
|
||||
import { inject, type Ref, ref } from 'vue'
|
||||
|
||||
import steveImage from '@/assets/steve-look-up-left.webp'
|
||||
|
||||
@@ -6,18 +6,14 @@
|
||||
|
||||
<template #actions>
|
||||
<div class="flex gap-2 justify-end">
|
||||
<ButtonStyled type="outlined">
|
||||
<button @click="modal?.hide()">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="red">
|
||||
<button @click="confirm">
|
||||
<TrashIcon />
|
||||
{{ formatMessage(messages.deleteButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="outlined" @click="modal?.hide()">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</Button>
|
||||
<Button type="colored" color="red" @click="confirm">
|
||||
<TrashIcon />
|
||||
{{ formatMessage(messages.deleteButton) }}
|
||||
</Button>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
@@ -27,7 +23,7 @@
|
||||
import { TrashIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
Admonition,
|
||||
ButtonStyled,
|
||||
Button,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
NewModal,
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
ref="modal"
|
||||
:header="formatMessage(messages.installToPlay)"
|
||||
:closable="true"
|
||||
:on-hide="show_ads_window"
|
||||
max-width="544px"
|
||||
width="544px"
|
||||
>
|
||||
@@ -18,12 +17,10 @@
|
||||
{{ formatMessage(messages.sharedInstance) }}
|
||||
</span>
|
||||
|
||||
<ButtonStyled type="transparent">
|
||||
<button @click="openViewContents">
|
||||
<EyeIcon />
|
||||
{{ formatMessage(messages.viewContents) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="quiet" @click="openViewContents">
|
||||
<EyeIcon />
|
||||
{{ formatMessage(messages.viewContents) }}
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center gap-3 rounded-2xl bg-surface-2 p-3">
|
||||
@@ -113,40 +110,30 @@
|
||||
</p>
|
||||
|
||||
<div class="flex w-full items-center justify-between gap-2">
|
||||
<ButtonStyled type="transparent" color="red">
|
||||
<button @click="handleReport">
|
||||
<ReportIcon />
|
||||
{{ formatMessage(commonMessages.reportButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="quiet" color="red" @click="handleReport">
|
||||
<ReportIcon />
|
||||
{{ formatMessage(commonMessages.reportButton) }}
|
||||
</Button>
|
||||
|
||||
<div class="flex items-center gap-2">
|
||||
<template v-if="hasExternalFiles">
|
||||
<ButtonStyled type="transparent" color="orange">
|
||||
<button @click="handleAccept">
|
||||
{{ formatMessage(messages.installAnyway) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button @click="handleDecline">
|
||||
<BanIcon />
|
||||
{{ formatMessage(messages.dontInstall) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="quiet" color="orange" @click="handleAccept">
|
||||
{{ formatMessage(messages.installAnyway) }}
|
||||
</Button>
|
||||
<Button type="colored" color="brand" @click="handleDecline">
|
||||
<BanIcon />
|
||||
{{ formatMessage(messages.dontInstall) }}
|
||||
</Button>
|
||||
</template>
|
||||
<template v-else>
|
||||
<ButtonStyled>
|
||||
<button @click="handleDecline">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button @click="handleAccept">
|
||||
<DownloadIcon />
|
||||
{{ formatMessage(messages.installButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button @click="handleDecline">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</Button>
|
||||
<Button type="colored" color="brand" @click="handleAccept">
|
||||
<DownloadIcon />
|
||||
{{ formatMessage(messages.installButton) }}
|
||||
</Button>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
@@ -163,10 +150,10 @@
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import { BanIcon, DownloadIcon, EyeIcon, ReportIcon, XIcon } from '@modrinth/assets'
|
||||
import { Button } from '@modrinth/ui'
|
||||
import {
|
||||
Admonition,
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
commonMessages,
|
||||
type ContentItem,
|
||||
defineMessages,
|
||||
@@ -181,7 +168,6 @@ import {
|
||||
import { openUrl } from '@tauri-apps/plugin-opener'
|
||||
import { computed, nextTick, ref } from 'vue'
|
||||
|
||||
import { hide_ads_window, show_ads_window } from '@/helpers/ads'
|
||||
import { get_project, get_project_many, get_version, get_version_many } from '@/helpers/cache.js'
|
||||
import { injectServerInstall } from '@/providers/server-install'
|
||||
|
||||
@@ -364,7 +350,6 @@ async function show(
|
||||
|
||||
if (modpackVersionIdVal) await fetchData(modpackVersionIdVal)
|
||||
|
||||
hide_ads_window()
|
||||
modal.value?.show(e)
|
||||
await nextTick()
|
||||
forceCheckTableScroll()
|
||||
@@ -415,8 +400,7 @@ const messages = defineMessages({
|
||||
},
|
||||
reviewedFiles: {
|
||||
id: 'app.modal.install-to-play.reviewed-files',
|
||||
defaultMessage:
|
||||
'A file is only reviewed if it’s published to Modrinth, regardless of its file format (including .mrpack).',
|
||||
defaultMessage: "Files that aren't published to Modrinth aren't reviewed.",
|
||||
},
|
||||
installAnyway: {
|
||||
id: 'app.modal.install-to-play.install-anyway',
|
||||
|
||||
@@ -10,24 +10,18 @@
|
||||
|
||||
<template #actions>
|
||||
<div class="flex gap-2 justify-end">
|
||||
<ButtonStyled type="outlined">
|
||||
<button @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>
|
||||
<Button type="outlined" @click="handleCancel">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</Button>
|
||||
<Button @click="handleGoToInstance">
|
||||
{{ formatMessage(messages.instance) }}
|
||||
<RightArrowIcon />
|
||||
</Button>
|
||||
<Button type="colored" color="orange" @click="handleCreateAnyway">
|
||||
<PlusIcon />
|
||||
{{ formatMessage(messages.create) }}
|
||||
</Button>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
@@ -36,7 +30,7 @@
|
||||
<script setup lang="ts">
|
||||
import { PlusIcon, RightArrowIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
Button,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
IntlFormatted,
|
||||
|
||||
@@ -19,18 +19,20 @@
|
||||
|
||||
<div class="flex flex-col gap-6">
|
||||
<div class="grid grid-cols-1 gap-2 sm:grid-cols-2">
|
||||
<ButtonStyled>
|
||||
<button class="w-full !shadow-none" type="button" @click="authenticate('sign-up')">
|
||||
<UserPlusIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.createAccountButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button class="w-full" type="button" @click="authenticate('sign-in')">
|
||||
<LogInIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.signInButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button class="w-full" native-type="button" @click="authenticate('sign-up')">
|
||||
<UserPlusIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.createAccountButton) }}
|
||||
</Button>
|
||||
<Button
|
||||
type="colored"
|
||||
color="brand"
|
||||
class="w-full"
|
||||
native-type="button"
|
||||
@click="authenticate('sign-in')"
|
||||
>
|
||||
<LogInIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.signInButton) }}
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<p class="m-0 text-center text-base font-medium leading-6 text-primary">
|
||||
@@ -69,23 +71,19 @@
|
||||
|
||||
<div class="flex flex-col gap-6">
|
||||
<div class="grid grid-cols-1 gap-2 sm:grid-cols-2">
|
||||
<ButtonStyled type="outlined">
|
||||
<button class="w-full" type="button" @click="modal?.hide()">
|
||||
<XIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<button
|
||||
class="w-full !shadow-none"
|
||||
type="button"
|
||||
:disabled="reopeningBrowser"
|
||||
@click="reopenBrowser"
|
||||
>
|
||||
<RefreshCwIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.openBrowserAgainButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="outlined" class="w-full" native-type="button" @click="modal?.hide()">
|
||||
<XIcon aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</Button>
|
||||
<Button
|
||||
class="w-full"
|
||||
native-type="button"
|
||||
:disabled="reopeningBrowser"
|
||||
@click="reopenBrowser"
|
||||
>
|
||||
<RefreshCwIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.openBrowserAgainButton) }}
|
||||
</Button>
|
||||
</div>
|
||||
|
||||
<p class="m-0 text-center text-base font-medium leading-6 text-primary">
|
||||
@@ -108,7 +106,14 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { LogInIcon, RefreshCwIcon, SpinnerIcon, UserPlusIcon, XIcon } from '@modrinth/assets'
|
||||
import { ButtonStyled, defineMessages, IntlFormatted, NewModal, useVIntl } from '@modrinth/ui'
|
||||
import {
|
||||
Button,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
IntlFormatted,
|
||||
NewModal,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { openUrl } from '@tauri-apps/plugin-opener'
|
||||
import { ref } from 'vue'
|
||||
|
||||
@@ -247,10 +252,6 @@ const messages = defineMessages({
|
||||
id: 'modal.modrinth-account-required.waiting-for-browser',
|
||||
defaultMessage: 'Waiting for browser confirmation...',
|
||||
},
|
||||
cancelButton: {
|
||||
id: 'modal.modrinth-account-required.cancel-button',
|
||||
defaultMessage: 'Cancel',
|
||||
},
|
||||
openBrowserAgainButton: {
|
||||
id: 'modal.modrinth-account-required.open-browser-again-button',
|
||||
defaultMessage: 'Open browser again',
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
import { Settings2Icon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
Button,
|
||||
defineMessages,
|
||||
injectNotificationManager,
|
||||
injectPageContext,
|
||||
@@ -78,12 +78,10 @@ watch(
|
||||
{{ formatMessage(messages.adsConsentTitle) }}
|
||||
</h2>
|
||||
<div class="mt-2 flex flex-col gap-2.5 items-start">
|
||||
<ButtonStyled>
|
||||
<button class="!shadow-none" @click="manageAdsPreferences">
|
||||
<Settings2Icon aria-hidden="true" />
|
||||
{{ formatMessage(messages.adsConsentManage) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button @click="manageAdsPreferences">
|
||||
<Settings2Icon aria-hidden="true" />
|
||||
{{ formatMessage(messages.adsConsentManage) }}
|
||||
</Button>
|
||||
<div>
|
||||
{{ formatMessage(messages.adsConsentIntro) }}
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<script setup lang="ts">
|
||||
import { ButtonStyled, Toggle } from '@modrinth/ui'
|
||||
import { Button, Toggle } from '@modrinth/ui'
|
||||
import { ref, watch } from 'vue'
|
||||
|
||||
import { get as getSettings, set as setSettings } from '@/helpers/settings.ts'
|
||||
@@ -33,14 +33,13 @@ watch(
|
||||
</h2>
|
||||
</div>
|
||||
<div class="flex items-center gap-2">
|
||||
<ButtonStyled type="transparent">
|
||||
<button
|
||||
:disabled="themeStore.getFeatureFlag(option) === DEFAULT_FEATURE_FLAGS[option]"
|
||||
@click="setFeatureFlag(option, DEFAULT_FEATURE_FLAGS[option])"
|
||||
>
|
||||
Reset to default
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button
|
||||
type="quiet"
|
||||
:disabled="themeStore.getFeatureFlag(option) === DEFAULT_FEATURE_FLAGS[option]"
|
||||
@click="setFeatureFlag(option, DEFAULT_FEATURE_FLAGS[option])"
|
||||
>
|
||||
Reset to default
|
||||
</Button>
|
||||
<Toggle
|
||||
id="advanced-rendering"
|
||||
:model-value="themeStore.getFeatureFlag(option)"
|
||||
|
||||
@@ -116,6 +116,35 @@ const messages = defineMessages({
|
||||
id: 'app.settings.default-instance-options.post-exit-hook.description',
|
||||
defaultMessage: 'Runs after the game closes.',
|
||||
},
|
||||
hookVariablesDescription: {
|
||||
id: 'instance.settings.tabs.hooks.variables.description',
|
||||
defaultMessage:
|
||||
'Hooks run in the working directory of the instance, with the following variables:',
|
||||
},
|
||||
instanceNameDescription: {
|
||||
id: 'instance.settings.tabs.hooks.variables.inst-name.description',
|
||||
defaultMessage: '$INST_NAME: The name of the instance',
|
||||
},
|
||||
instanceIdDescription: {
|
||||
id: 'instance.settings.tabs.hooks.variables.inst-id.description',
|
||||
defaultMessage: "$INST_ID: The name of the instance's folder",
|
||||
},
|
||||
instanceDirDescription: {
|
||||
id: 'instance.settings.tabs.hooks.variables.inst-dir.description',
|
||||
defaultMessage: "$INST_DIR: The absolute path to the instance's folder",
|
||||
},
|
||||
instanceMcDirDescription: {
|
||||
id: 'instance.settings.tabs.hooks.variables.inst-mc-dir.description',
|
||||
defaultMessage: '$INST_MC_DIR: An alias for $INST_DIR',
|
||||
},
|
||||
instanceJavaDescription: {
|
||||
id: 'instance.settings.tabs.hooks.variables.inst-java.description',
|
||||
defaultMessage: '$INST_JAVA: The absolute path to the java binary',
|
||||
},
|
||||
instanceJavaArgsDescription: {
|
||||
id: 'instance.settings.tabs.hooks.variables.inst-java-args.description',
|
||||
defaultMessage: '$INST_JAVA_ARGS: The JVM Arguments provided to the game',
|
||||
},
|
||||
})
|
||||
|
||||
const fetchSettings = await get()
|
||||
@@ -328,6 +357,18 @@ watch(
|
||||
{{ formatMessage(messages.postExitHookDescription) }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="m-0 leading-tight">
|
||||
{{ formatMessage(messages.hookVariablesDescription) }}
|
||||
<ul>
|
||||
<li>{{ formatMessage(messages.instanceNameDescription) }}</li>
|
||||
<li>{{ formatMessage(messages.instanceIdDescription) }}</li>
|
||||
<li>{{ formatMessage(messages.instanceDirDescription) }}</li>
|
||||
<li>{{ formatMessage(messages.instanceMcDirDescription) }}</li>
|
||||
<li>{{ formatMessage(messages.instanceJavaDescription) }}</li>
|
||||
<li>{{ formatMessage(messages.instanceJavaArgsDescription) }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
+14
-15
@@ -1,8 +1,9 @@
|
||||
<script setup>
|
||||
import { BoxIcon, FolderOpenIcon, FolderSearchIcon, TrashIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
Button,
|
||||
defineMessages,
|
||||
IconButton,
|
||||
injectNotificationManager,
|
||||
Slider,
|
||||
StyledInput,
|
||||
@@ -183,16 +184,14 @@ async function findLauncherDir() {
|
||||
wrapper-class="w-full"
|
||||
>
|
||||
<template #right>
|
||||
<ButtonStyled circular>
|
||||
<button
|
||||
v-tooltip="formatMessage(messages.browseAppDirectory)"
|
||||
:aria-label="formatMessage(messages.browseAppDirectory)"
|
||||
class="ml-1.5"
|
||||
@click="findLauncherDir"
|
||||
>
|
||||
<FolderSearchIcon aria-hidden="true" />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<IconButton
|
||||
v-tooltip="formatMessage(messages.browseAppDirectory)"
|
||||
:label="formatMessage(messages.browseAppDirectory)"
|
||||
class="ml-1.5"
|
||||
@click="findLauncherDir"
|
||||
>
|
||||
<FolderSearchIcon aria-hidden="true" />
|
||||
</IconButton>
|
||||
</template>
|
||||
</StyledInput>
|
||||
<p class="m-0 leading-tight text-secondary">
|
||||
@@ -235,10 +234,10 @@ async function findLauncherDir() {
|
||||
<h2 class="m-0 text-lg font-semibold text-contrast">
|
||||
{{ formatMessage(messages.appCacheTitle) }}
|
||||
</h2>
|
||||
<button id="purge-cache" class="btn min-w-max" @click="handlePurgeCacheClick">
|
||||
<Button id="purge-cache" class="w-fit" @click="handlePurgeCacheClick">
|
||||
<TrashIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.purgeCache) }}
|
||||
</button>
|
||||
</Button>
|
||||
<p class="m-0 leading-tight text-secondary">
|
||||
{{ formatMessage(messages.appCacheDescription) }}
|
||||
</p>
|
||||
@@ -280,10 +279,10 @@ async function findLauncherDir() {
|
||||
<h2 class="mt-0 m-0 text-lg font-semibold text-contrast">
|
||||
{{ formatMessage(messages.appDatabaseBackupsTitle) }}
|
||||
</h2>
|
||||
<button id="open-db-backups-folder" class="btn min-w-max" @click="openDbBackupsFolder">
|
||||
<Button id="open-db-backups-folder" class="w-fit" @click="openDbBackupsFolder">
|
||||
<FolderOpenIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.openBackupsFolder) }}
|
||||
</button>
|
||||
</Button>
|
||||
<p class="m-0 leading-tight text-secondary">
|
||||
{{ formatMessage(messages.appDatabaseBackupsDescription) }}
|
||||
</p>
|
||||
|
||||
+13
-19
@@ -10,24 +10,18 @@
|
||||
|
||||
<template #actions>
|
||||
<div class="flex justify-end gap-2">
|
||||
<ButtonStyled type="outlined">
|
||||
<button @click="handleCancel">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<button @click="handleGoToInstance">
|
||||
{{ formatMessage(messages.instance) }}
|
||||
<RightArrowIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="orange">
|
||||
<button @click="handleInstallAnyway">
|
||||
<DownloadIcon />
|
||||
{{ formatMessage(messages.installAnyway) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="outlined" @click="handleCancel">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</Button>
|
||||
<Button @click="handleGoToInstance">
|
||||
{{ formatMessage(messages.instance) }}
|
||||
<RightArrowIcon />
|
||||
</Button>
|
||||
<Button type="colored" color="orange" @click="handleInstallAnyway">
|
||||
<DownloadIcon />
|
||||
{{ formatMessage(messages.installAnyway) }}
|
||||
</Button>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
@@ -36,7 +30,7 @@
|
||||
<script setup lang="ts">
|
||||
import { DownloadIcon, RightArrowIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
Button,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
IntlFormatted,
|
||||
|
||||
+40
-4
@@ -26,12 +26,14 @@
|
||||
</span>
|
||||
</template>
|
||||
<div class="flex min-w-0 flex-col gap-3 pt-4">
|
||||
<div class="max-h-[292px] overflow-y-auto rounded-[20px]">
|
||||
<div ref="configFileTreeContainer" class="max-h-[292px] overflow-y-auto rounded-[20px]">
|
||||
<FileTreeSelect
|
||||
v-model="selectedConfigPaths"
|
||||
v-model="includedConfigPaths"
|
||||
v-model:excluded-paths="excludedConfigPaths"
|
||||
:items="configFileItems"
|
||||
:show-size="false"
|
||||
:show-modified="false"
|
||||
@navigate="scrollConfigFileTreeToTop"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
@@ -75,13 +77,23 @@ const emit = defineEmits<{
|
||||
const { formatMessage } = useVIntl()
|
||||
const { notifySharedInstanceError, notifySharedInstanceUnavailable } = useSharedInstanceErrors()
|
||||
const publishReviewModal = ref<InstanceType<typeof ContentDiffModal>>()
|
||||
const configFileTreeContainer = ref<HTMLElement>()
|
||||
const publishDiffs = ref<ContentDiffItem[]>([])
|
||||
const configFilePaths = ref<string[]>([])
|
||||
const selectedConfigPaths = ref<string[]>([])
|
||||
const includedConfigPaths = ref<string[]>([])
|
||||
const excludedConfigPaths = ref<string[]>([])
|
||||
const state = ref<SharedInstancePublishState>('idle')
|
||||
const configFileItems = computed<FileTreeSelectItem[]>(() =>
|
||||
configFilePaths.value.map((path) => ({ path, type: 'file' })),
|
||||
)
|
||||
const selectedConfigPaths = computed(() => {
|
||||
const includedPaths = new Set(includedConfigPaths.value)
|
||||
const excludedPaths = new Set(excludedConfigPaths.value)
|
||||
|
||||
return configFilePaths.value.filter((path) =>
|
||||
isConfigPathSelected(path, includedPaths, excludedPaths),
|
||||
)
|
||||
})
|
||||
|
||||
async function show(e?: MouseEvent) {
|
||||
if (state.value !== 'idle') return
|
||||
@@ -106,7 +118,8 @@ async function show(e?: MouseEvent) {
|
||||
disabled: diff.disabled,
|
||||
}))
|
||||
configFilePaths.value = preview.configFiles
|
||||
selectedConfigPaths.value = []
|
||||
includedConfigPaths.value = []
|
||||
excludedConfigPaths.value = []
|
||||
if (!publishReviewModal.value) return
|
||||
|
||||
publishReviewModal.value.show(e)
|
||||
@@ -132,6 +145,29 @@ async function publishChanges() {
|
||||
}
|
||||
}
|
||||
|
||||
function isConfigPathSelected(
|
||||
path: string,
|
||||
includedPaths: Set<string>,
|
||||
excludedPaths: Set<string>,
|
||||
) {
|
||||
let selected = false
|
||||
let prefix = ''
|
||||
|
||||
for (const segment of path.split('/').filter(Boolean)) {
|
||||
prefix = prefix ? `${prefix}/${segment}` : segment
|
||||
if (includedPaths.has(prefix)) selected = true
|
||||
if (excludedPaths.has(prefix)) selected = false
|
||||
}
|
||||
|
||||
return selected
|
||||
}
|
||||
|
||||
function scrollConfigFileTreeToTop() {
|
||||
if (configFileTreeContainer.value) {
|
||||
configFileTreeContainer.value.scrollTop = 0
|
||||
}
|
||||
}
|
||||
|
||||
function finishReview() {
|
||||
if (state.value === 'reviewing') {
|
||||
setState('idle')
|
||||
|
||||
+25
-43
@@ -193,53 +193,39 @@
|
||||
{{ formatMessage(messages.reviewedFiles) }}
|
||||
</p>
|
||||
<div v-if="!reportMode" class="flex w-full items-center justify-between gap-2">
|
||||
<ButtonStyled color="red" type="transparent">
|
||||
<button @click="reportMode = true">
|
||||
<ReportIcon />{{ formatMessage(commonMessages.reportButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="quiet" color="red" @click="reportMode = true">
|
||||
<ReportIcon />{{ formatMessage(commonMessages.reportButton) }}
|
||||
</Button>
|
||||
<div class="flex items-center gap-2">
|
||||
<template v-if="hasExternalFiles">
|
||||
<ButtonStyled type="transparent" color="orange">
|
||||
<button @click="accept">
|
||||
{{ formatMessage(messages.installAnyway) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button @click="handleCancel">
|
||||
<BanIcon />{{ formatMessage(messages.dontInstall) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="quiet" color="orange" @click="accept">
|
||||
{{ formatMessage(messages.installAnyway) }}
|
||||
</Button>
|
||||
<Button type="colored" color="brand" @click="handleCancel">
|
||||
<BanIcon />{{ formatMessage(messages.dontInstall) }}
|
||||
</Button>
|
||||
</template>
|
||||
<template v-else>
|
||||
<ButtonStyled type="outlined">
|
||||
<button class="!border" @click="handleCancel">
|
||||
<XIcon />{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button @click="accept">
|
||||
<DownloadIcon />{{ formatMessage(messages.installButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="outlined" class="!border" @click="handleCancel">
|
||||
<XIcon />{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</Button>
|
||||
<Button type="colored" color="brand" @click="accept">
|
||||
<DownloadIcon />{{ formatMessage(messages.installButton) }}
|
||||
</Button>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<template v-if="reportMode" #actions>
|
||||
<div class="flex justify-end gap-2">
|
||||
<ButtonStyled type="outlined">
|
||||
<button class="!border" :disabled="submitLoading" @click="handleCancel">
|
||||
<XIcon />{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button :disabled="!canSubmitReport" @click="submitReport">
|
||||
<SpinnerIcon v-if="submitLoading" class="animate-spin" />
|
||||
<SendIcon v-else />
|
||||
{{ formatMessage(commonMessages.reportButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="outlined" class="!border" :disabled="submitLoading" @click="handleCancel">
|
||||
<XIcon />{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</Button>
|
||||
<Button type="colored" color="brand" :disabled="!canSubmitReport" @click="submitReport">
|
||||
<SpinnerIcon v-if="submitLoading" class="animate-spin" />
|
||||
<SendIcon v-else />
|
||||
{{ formatMessage(commonMessages.reportButton) }}
|
||||
</Button>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
@@ -254,12 +240,12 @@
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import { BanIcon, DownloadIcon, ReportIcon, SendIcon, SpinnerIcon, XIcon } from '@modrinth/assets'
|
||||
import { Button } from '@modrinth/ui'
|
||||
import {
|
||||
Admonition,
|
||||
AutoLink,
|
||||
Avatar,
|
||||
blockedUsersQueryKey,
|
||||
ButtonStyled,
|
||||
Checkbox,
|
||||
Combobox,
|
||||
type ComboboxOption,
|
||||
@@ -282,7 +268,6 @@ import { openUrl } from '@tauri-apps/plugin-opener'
|
||||
import { computed, nextTick, ref } from 'vue'
|
||||
|
||||
import { config } from '@/config'
|
||||
import { hide_ads_window, show_ads_window } from '@/helpers/ads'
|
||||
import { toError } from '@/helpers/errors'
|
||||
import type { SharedInstanceInstallPreview } from '@/helpers/install'
|
||||
import { create_report } from '@/helpers/reports'
|
||||
@@ -462,7 +447,6 @@ function handleCancel() {
|
||||
function handleHide() {
|
||||
resetReportState()
|
||||
creator.value = null
|
||||
show_ads_window()
|
||||
}
|
||||
function resetReportState() {
|
||||
reportMode.value = false
|
||||
@@ -502,7 +486,6 @@ function showReport(
|
||||
}
|
||||
function showPreview(previewValue: SharedInstanceInstallPreview, event?: MouseEvent) {
|
||||
preview.value = previewValue
|
||||
hide_ads_window()
|
||||
modal.value?.show(event)
|
||||
void nextTick(() => forceCheckTableScroll())
|
||||
}
|
||||
@@ -612,8 +595,7 @@ const messages = defineMessages({
|
||||
},
|
||||
reviewedFiles: {
|
||||
id: 'app.modal.install-to-play.reviewed-files',
|
||||
defaultMessage:
|
||||
'A file is only reviewed if it’s published to Modrinth, regardless of its file format (including .mrpack).',
|
||||
defaultMessage: "Files that aren't published to Modrinth aren't reviewed.",
|
||||
},
|
||||
installAnyway: {
|
||||
id: 'app.modal.install-to-play.install-anyway',
|
||||
|
||||
+5
-7
@@ -4,12 +4,10 @@
|
||||
<span class="font-semibold text-contrast">{{
|
||||
heading ?? formatMessage(messages.sharedInstance)
|
||||
}}</span>
|
||||
<ButtonStyled type="transparent">
|
||||
<button @click="emit('viewContents')">
|
||||
<EyeIcon />
|
||||
{{ formatMessage(messages.viewContents) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="quiet" @click="emit('viewContents')">
|
||||
<EyeIcon />
|
||||
{{ formatMessage(messages.viewContents) }}
|
||||
</Button>
|
||||
</div>
|
||||
<div class="flex items-center gap-3 rounded-2xl bg-surface-2 p-3">
|
||||
<Avatar
|
||||
@@ -34,7 +32,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { EyeIcon } from '@modrinth/assets'
|
||||
import { Avatar, ButtonStyled, defineMessages, formatLoader, useVIntl } from '@modrinth/ui'
|
||||
import { Avatar, Button, defineMessages, formatLoader, useVIntl } from '@modrinth/ui'
|
||||
import { computed, toRefs } from 'vue'
|
||||
|
||||
import type { SharedInstanceInstallPreview } from '@/helpers/install'
|
||||
|
||||
@@ -22,11 +22,9 @@
|
||||
<div class="flex flex-col gap-4 w-full min-h-[20rem]">
|
||||
<section v-if="mode === 'edit' && canEditTextureAndModel">
|
||||
<h2 class="text-base font-semibold mb-2">{{ formatMessage(messages.textureSection) }}</h2>
|
||||
<ButtonStyled>
|
||||
<button class="!shadow-none" @click="openTextureFileBrowser">
|
||||
<UploadIcon /> {{ formatMessage(messages.replaceTextureButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button @click="openTextureFileBrowser">
|
||||
<UploadIcon /> {{ formatMessage(messages.replaceTextureButton) }}
|
||||
</Button>
|
||||
<input
|
||||
ref="textureFileInput"
|
||||
type="file"
|
||||
@@ -112,19 +110,21 @@
|
||||
|
||||
<template #actions>
|
||||
<div class="flex gap-2 justify-end">
|
||||
<ButtonStyled type="outlined">
|
||||
<button :disabled="isSaving" @click="hide">
|
||||
<XIcon />{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button v-tooltip="saveTooltip" :disabled="disableSave || isSaving" @click="save">
|
||||
<SpinnerIcon v-if="isSaving" class="animate-spin" />
|
||||
<CheckIcon v-else-if="mode === 'new'" />
|
||||
<SaveIcon v-else />
|
||||
{{ formatMessage(mode === 'new' ? messages.addSkinButton : messages.saveSkinButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="outlined" :disabled="isSaving" @click="hide">
|
||||
<XIcon />{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</Button>
|
||||
<Button
|
||||
v-tooltip="saveTooltip"
|
||||
type="colored"
|
||||
color="brand"
|
||||
:disabled="disableSave || isSaving"
|
||||
@click="save"
|
||||
>
|
||||
<SpinnerIcon v-if="isSaving" class="animate-spin" />
|
||||
<CheckIcon v-else-if="mode === 'new'" />
|
||||
<SaveIcon v-else />
|
||||
{{ formatMessage(mode === 'new' ? messages.addSkinButton : messages.saveSkinButton) }}
|
||||
</Button>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
@@ -133,7 +133,7 @@
|
||||
<script setup lang="ts">
|
||||
import { CheckIcon, SaveIcon, SpinnerIcon, UploadIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
Button,
|
||||
CapeButton,
|
||||
CapeLikeTextButton,
|
||||
commonMessages,
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
import { DropdownIcon, EditIcon, PlusIcon, TrashIcon, UnknownIcon } from '@modrinth/assets'
|
||||
import {
|
||||
Accordion,
|
||||
ButtonStyled,
|
||||
Button,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
IconButton,
|
||||
SkinButton,
|
||||
SkinLikeTextButton,
|
||||
useScrollViewport,
|
||||
@@ -463,25 +464,26 @@ defineExpose({ getAddSkinButtonElement })
|
||||
@select="emit('select', skin)"
|
||||
>
|
||||
<template v-if="!readOnly" #overlay-buttons>
|
||||
<ButtonStyled color="brand">
|
||||
<button
|
||||
:aria-label="formatMessage(messages.editSkinButton)"
|
||||
class="pointer-events-auto"
|
||||
@click.stop="(event: MouseEvent) => emit('edit', skin, event)"
|
||||
>
|
||||
<EditIcon /> {{ formatMessage(commonMessages.editButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-show="!skin.is_equipped" circular color="red">
|
||||
<button
|
||||
v-tooltip="formatMessage(messages.deleteSkinButton)"
|
||||
:aria-label="formatMessage(messages.deleteSkinButton)"
|
||||
class="!rounded-[100%] pointer-events-auto"
|
||||
@click.stop="emit('delete', skin)"
|
||||
>
|
||||
<TrashIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button
|
||||
type="colored"
|
||||
color="brand"
|
||||
:aria-label="formatMessage(messages.editSkinButton)"
|
||||
class="pointer-events-auto"
|
||||
@click.stop="(event: MouseEvent) => emit('edit', skin, event)"
|
||||
>
|
||||
<EditIcon /> {{ formatMessage(commonMessages.editButton) }}
|
||||
</Button>
|
||||
<IconButton
|
||||
v-show="!skin.is_equipped"
|
||||
v-tooltip="formatMessage(messages.deleteSkinButton)"
|
||||
type="colored"
|
||||
color="red"
|
||||
:label="formatMessage(messages.deleteSkinButton)"
|
||||
class="!rounded-[100%] pointer-events-auto"
|
||||
@click.stop="emit('delete', skin)"
|
||||
>
|
||||
<TrashIcon />
|
||||
</IconButton>
|
||||
</template>
|
||||
</SkinButton>
|
||||
</div>
|
||||
@@ -503,25 +505,26 @@ defineExpose({ getAddSkinButtonElement })
|
||||
@select="emit('select', skin)"
|
||||
>
|
||||
<template v-if="!readOnly" #overlay-buttons>
|
||||
<ButtonStyled color="brand">
|
||||
<button
|
||||
:aria-label="formatMessage(messages.editSkinButton)"
|
||||
class="pointer-events-auto"
|
||||
@click.stop="(event: MouseEvent) => emit('edit', skin, event)"
|
||||
>
|
||||
<EditIcon /> {{ formatMessage(commonMessages.editButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-show="!skin.is_equipped" circular color="red">
|
||||
<button
|
||||
v-tooltip="formatMessage(messages.deleteSkinButton)"
|
||||
:aria-label="formatMessage(messages.deleteSkinButton)"
|
||||
class="!rounded-[100%] pointer-events-auto"
|
||||
@click.stop="emit('delete', skin)"
|
||||
>
|
||||
<TrashIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button
|
||||
type="colored"
|
||||
color="brand"
|
||||
:aria-label="formatMessage(messages.editSkinButton)"
|
||||
class="pointer-events-auto"
|
||||
@click.stop="(event: MouseEvent) => emit('edit', skin, event)"
|
||||
>
|
||||
<EditIcon /> {{ formatMessage(commonMessages.editButton) }}
|
||||
</Button>
|
||||
<IconButton
|
||||
v-show="!skin.is_equipped"
|
||||
v-tooltip="formatMessage(messages.deleteSkinButton)"
|
||||
type="colored"
|
||||
color="red"
|
||||
:label="formatMessage(messages.deleteSkinButton)"
|
||||
class="!rounded-[100%] pointer-events-auto"
|
||||
@click.stop="emit('delete', skin)"
|
||||
>
|
||||
<TrashIcon />
|
||||
</IconButton>
|
||||
</template>
|
||||
</SkinButton>
|
||||
</div>
|
||||
@@ -545,15 +548,15 @@ defineExpose({ getAddSkinButtonElement })
|
||||
@select="emit('select', skin)"
|
||||
>
|
||||
<template #overlay-buttons>
|
||||
<ButtonStyled color="brand">
|
||||
<button
|
||||
:aria-label="formatMessage(messages.editSkinButton)"
|
||||
class="pointer-events-auto"
|
||||
@click.stop="(event: MouseEvent) => emit('edit', skin, event)"
|
||||
>
|
||||
<EditIcon /> {{ formatMessage(commonMessages.editButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button
|
||||
type="colored"
|
||||
color="brand"
|
||||
:aria-label="formatMessage(messages.editSkinButton)"
|
||||
class="pointer-events-auto"
|
||||
@click.stop="(event: MouseEvent) => emit('edit', skin, event)"
|
||||
>
|
||||
<EditIcon /> {{ formatMessage(commonMessages.editButton) }}
|
||||
</Button>
|
||||
</template>
|
||||
</SkinButton>
|
||||
</div>
|
||||
|
||||
@@ -9,11 +9,11 @@ import {
|
||||
} from '@modrinth/assets'
|
||||
import {
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
Button,
|
||||
commonMessages,
|
||||
injectNotificationManager,
|
||||
OverflowMenu,
|
||||
SmartClickable,
|
||||
TeleportOverflowMenu,
|
||||
useFormatDateTime,
|
||||
useRelativeTime,
|
||||
useVIntl,
|
||||
@@ -185,54 +185,53 @@ onUnmounted(() => {
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex gap-1 justify-end smart-clickable:allow-pointer-events">
|
||||
<ButtonStyled v-if="playing && !loading" color="red">
|
||||
<button @click="stop">
|
||||
<StopCircleIcon aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.stopButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else>
|
||||
<button
|
||||
v-tooltip="
|
||||
instance.quarantined
|
||||
? 'This instance has been locked'
|
||||
: playing
|
||||
? 'Instance is already open'
|
||||
: null
|
||||
"
|
||||
:disabled="instance.quarantined || playing || loading"
|
||||
@click="play"
|
||||
>
|
||||
<SpinnerIcon v-if="loading" class="animate-spin" />
|
||||
<PlayIcon v-else aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.playButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular type="transparent">
|
||||
<OverflowMenu
|
||||
:options="[
|
||||
{
|
||||
id: 'open-instance',
|
||||
shown: !!instance.id,
|
||||
action: () => router.push(encodeURI(`/instance/${instance.id}`)),
|
||||
},
|
||||
{
|
||||
id: 'open-folder',
|
||||
action: () => showInstanceInFolder(instance.id),
|
||||
},
|
||||
]"
|
||||
>
|
||||
<MoreVerticalIcon aria-hidden="true" />
|
||||
<template #open-instance>
|
||||
<EyeIcon aria-hidden="true" />
|
||||
View instance
|
||||
</template>
|
||||
<template #open-folder>
|
||||
<FolderOpenIcon aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.openFolderButton) }}
|
||||
</template>
|
||||
</OverflowMenu>
|
||||
</ButtonStyled>
|
||||
<Button v-if="playing && !loading" type="colored" color="red" @click="stop">
|
||||
<StopCircleIcon aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.stopButton) }}
|
||||
</Button>
|
||||
<Button
|
||||
v-else
|
||||
v-tooltip="
|
||||
instance.quarantined
|
||||
? 'This instance has been locked'
|
||||
: playing
|
||||
? 'Instance is already open'
|
||||
: null
|
||||
"
|
||||
:disabled="instance.quarantined || playing || loading"
|
||||
@click="play"
|
||||
>
|
||||
<SpinnerIcon v-if="loading" class="animate-spin" />
|
||||
<PlayIcon v-else aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.playButton) }}
|
||||
</Button>
|
||||
<TeleportOverflowMenu
|
||||
type="quiet"
|
||||
label="More options"
|
||||
:options="[
|
||||
{
|
||||
id: 'open-instance',
|
||||
label: 'View instance',
|
||||
shown: !!instance.id,
|
||||
action: () => router.push(encodeURI(`/instance/${instance.id}`)),
|
||||
},
|
||||
{
|
||||
id: 'open-folder',
|
||||
label: formatMessage(commonMessages.openFolderButton),
|
||||
action: () => showInstanceInFolder(instance.id),
|
||||
},
|
||||
]"
|
||||
>
|
||||
<MoreVerticalIcon aria-hidden="true" />
|
||||
<template #open-instance>
|
||||
<EyeIcon aria-hidden="true" />
|
||||
View instance
|
||||
</template>
|
||||
<template #open-folder>
|
||||
<FolderOpenIcon aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.openFolderButton) }}
|
||||
</template>
|
||||
</TeleportOverflowMenu>
|
||||
</div>
|
||||
</div>
|
||||
</SmartClickable>
|
||||
|
||||
@@ -21,13 +21,13 @@ import {
|
||||
import type { MessageDescriptor } from '@modrinth/ui'
|
||||
import {
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
Button,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
injectNotificationManager,
|
||||
OverflowMenu,
|
||||
SmartClickable,
|
||||
TagItem,
|
||||
TeleportOverflowMenu,
|
||||
useFormatDateTime,
|
||||
useFormatNumber,
|
||||
useRelativeTime,
|
||||
@@ -412,177 +412,184 @@ const messages = defineMessages({
|
||||
</template>
|
||||
</div>
|
||||
<div class="flex gap-1 justify-end smart-clickable:allow-pointer-events">
|
||||
<ButtonStyled
|
||||
<Button
|
||||
v-if="(playingWorld || (locked && playingInstance)) && !startingInstance"
|
||||
type="colored"
|
||||
color="red"
|
||||
@click="emit('stop')"
|
||||
>
|
||||
<button @click="emit('stop')">
|
||||
<StopCircleIcon aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.stopButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-else>
|
||||
<button
|
||||
v-tooltip="
|
||||
quarantined
|
||||
? 'This instance has been locked'
|
||||
: world.type === 'server'
|
||||
? !supportsServerQuickPlay
|
||||
? formatMessage(messages.noServerQuickPlay)
|
||||
: playingOtherWorld
|
||||
? formatMessage(messages.gameAlreadyOpen)
|
||||
: !serverStatus
|
||||
? formatMessage(messages.noContact)
|
||||
: serverIncompatible
|
||||
? formatMessage(messages.incompatibleServer)
|
||||
: null
|
||||
: !supportsWorldQuickPlay
|
||||
? formatMessage(messages.noSingleplayerQuickPlay)
|
||||
: playingOtherWorld || locked
|
||||
? formatMessage(messages.gameAlreadyOpen)
|
||||
: null
|
||||
"
|
||||
:disabled="
|
||||
quarantined ||
|
||||
playingOtherWorld ||
|
||||
startingInstance ||
|
||||
(world.type == 'server' && !supportsServerQuickPlay) ||
|
||||
(world.type == 'singleplayer' && !supportsWorldQuickPlay)
|
||||
"
|
||||
@click="emit('play')"
|
||||
>
|
||||
<SpinnerIcon v-if="startingInstance && playingWorld" class="animate-spin" />
|
||||
<PlayIcon v-else aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.playButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled circular type="transparent">
|
||||
<OverflowMenu
|
||||
:options="[
|
||||
{
|
||||
id: 'play-instance',
|
||||
shown: !!instanceId,
|
||||
disabled: playingInstance || quarantined,
|
||||
action: () => emit('play-instance'),
|
||||
<StopCircleIcon aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.stopButton) }}
|
||||
</Button>
|
||||
<Button
|
||||
v-else
|
||||
v-tooltip="
|
||||
quarantined
|
||||
? 'This instance has been locked'
|
||||
: world.type === 'server'
|
||||
? !supportsServerQuickPlay
|
||||
? formatMessage(messages.noServerQuickPlay)
|
||||
: playingOtherWorld
|
||||
? formatMessage(messages.gameAlreadyOpen)
|
||||
: !serverStatus
|
||||
? formatMessage(messages.noContact)
|
||||
: serverIncompatible
|
||||
? formatMessage(messages.incompatibleServer)
|
||||
: null
|
||||
: !supportsWorldQuickPlay
|
||||
? formatMessage(messages.noSingleplayerQuickPlay)
|
||||
: playingOtherWorld || locked
|
||||
? formatMessage(messages.gameAlreadyOpen)
|
||||
: null
|
||||
"
|
||||
:disabled="
|
||||
quarantined ||
|
||||
playingOtherWorld ||
|
||||
startingInstance ||
|
||||
(world.type == 'server' && !supportsServerQuickPlay) ||
|
||||
(world.type == 'singleplayer' && !supportsWorldQuickPlay)
|
||||
"
|
||||
@click="emit('play')"
|
||||
>
|
||||
<SpinnerIcon v-if="startingInstance && playingWorld" class="animate-spin" />
|
||||
<PlayIcon v-else aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.playButton) }}
|
||||
</Button>
|
||||
<TeleportOverflowMenu
|
||||
type="quiet"
|
||||
label="More options"
|
||||
:options="[
|
||||
{
|
||||
id: 'play-instance',
|
||||
label: formatMessage(messages.playInstance),
|
||||
shown: !!instanceId,
|
||||
disabled: playingInstance || quarantined,
|
||||
action: () => emit('play-instance'),
|
||||
},
|
||||
{
|
||||
id: 'open-instance',
|
||||
label: formatMessage(messages.viewInstance),
|
||||
shown: !!instanceId,
|
||||
action: () => router.push(`/instance/${encodeURIComponent(instanceId)}`),
|
||||
},
|
||||
{
|
||||
id: 'refresh',
|
||||
label: formatMessage(commonMessages.refreshButton),
|
||||
shown: world.type === 'server',
|
||||
action: () => emit('refresh'),
|
||||
},
|
||||
{
|
||||
id: 'copy-address',
|
||||
label: formatMessage(messages.copyAddress),
|
||||
shown: world.type === 'server',
|
||||
action: () => copyToClipboard((world as ServerWorld).address),
|
||||
},
|
||||
{
|
||||
id: 'edit',
|
||||
label: formatMessage(commonMessages.editButton),
|
||||
action: () => emit('edit'),
|
||||
shown: !instanceId,
|
||||
disabled: locked || managed,
|
||||
tooltip: locked
|
||||
? formatMessage(messages.worldInUse)
|
||||
: managed
|
||||
? formatMessage(messages.linkedServer)
|
||||
: undefined,
|
||||
},
|
||||
{
|
||||
id: 'open-folder',
|
||||
label: formatMessage(commonMessages.openFolderButton),
|
||||
shown: world.type === 'singleplayer',
|
||||
action: () => (world.type === 'singleplayer' ? emit('open-folder', world) : {}),
|
||||
},
|
||||
{
|
||||
type: 'divider',
|
||||
shown: !!instanceId,
|
||||
},
|
||||
{
|
||||
id: 'dont-show-on-home',
|
||||
label: formatMessage(messages.dontShowOnHome),
|
||||
shown: !!instanceId,
|
||||
action: () => {
|
||||
set_world_display_status(
|
||||
instanceId,
|
||||
world.type,
|
||||
getWorldIdentifier(world),
|
||||
'hidden',
|
||||
).then(() => {
|
||||
emit('update')
|
||||
})
|
||||
},
|
||||
{
|
||||
id: 'open-instance',
|
||||
shown: !!instanceId,
|
||||
action: () => router.push(`/instance/${encodeURIComponent(instanceId)}`),
|
||||
},
|
||||
{
|
||||
id: 'refresh',
|
||||
shown: world.type === 'server',
|
||||
action: () => emit('refresh'),
|
||||
},
|
||||
{
|
||||
id: 'copy-address',
|
||||
shown: world.type === 'server',
|
||||
action: () => copyToClipboard((world as ServerWorld).address),
|
||||
},
|
||||
{
|
||||
id: 'edit',
|
||||
action: () => emit('edit'),
|
||||
shown: !instanceId,
|
||||
disabled: locked || managed,
|
||||
tooltip: locked
|
||||
? formatMessage(messages.worldInUse)
|
||||
: managed
|
||||
? formatMessage(messages.linkedServer)
|
||||
: undefined,
|
||||
},
|
||||
{
|
||||
id: 'open-folder',
|
||||
shown: world.type === 'singleplayer',
|
||||
action: () => (world.type === 'singleplayer' ? emit('open-folder', world) : {}),
|
||||
},
|
||||
{
|
||||
divider: true,
|
||||
shown: !!instanceId,
|
||||
},
|
||||
{
|
||||
id: 'dont-show-on-home',
|
||||
shown: !!instanceId,
|
||||
action: () => {
|
||||
set_world_display_status(
|
||||
instanceId,
|
||||
world.type,
|
||||
getWorldIdentifier(world),
|
||||
'hidden',
|
||||
).then(() => {
|
||||
emit('update')
|
||||
})
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'create-shortcut',
|
||||
shown: !!shortcutInstanceId && !quarantined,
|
||||
action: () => createShortcut(),
|
||||
},
|
||||
{
|
||||
divider: true,
|
||||
shown: !instanceId,
|
||||
},
|
||||
{
|
||||
id: 'delete',
|
||||
color: 'red',
|
||||
hoverFilled: true,
|
||||
action: () => emit('delete'),
|
||||
shown: !instanceId,
|
||||
disabled: locked || managed,
|
||||
tooltip: locked
|
||||
? formatMessage(messages.worldInUse)
|
||||
: managed
|
||||
? formatMessage(messages.linkedServer)
|
||||
: undefined,
|
||||
},
|
||||
]"
|
||||
>
|
||||
<MoreVerticalIcon aria-hidden="true" />
|
||||
<template #play-instance>
|
||||
<PlayIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.playInstance) }}
|
||||
</template>
|
||||
<template #open-instance>
|
||||
<EyeIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.viewInstance) }}
|
||||
</template>
|
||||
<template #edit>
|
||||
<EditIcon aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.editButton) }}
|
||||
</template>
|
||||
<template #open-folder>
|
||||
<FolderOpenIcon aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.openFolderButton) }}
|
||||
</template>
|
||||
<template #copy-address>
|
||||
<ClipboardCopyIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.copyAddress) }}
|
||||
</template>
|
||||
<template #refresh>
|
||||
<UpdatedIcon aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.refreshButton) }}
|
||||
</template>
|
||||
<template #create-shortcut>
|
||||
<ExternalIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.createShortcut) }}
|
||||
</template>
|
||||
<template #dont-show-on-home>
|
||||
<XIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.dontShowOnHome) }}
|
||||
</template>
|
||||
<template #delete>
|
||||
<TrashIcon aria-hidden="true" />
|
||||
{{
|
||||
formatMessage(
|
||||
world.type === 'server'
|
||||
? commonMessages.removeButton
|
||||
: commonMessages.deleteLabel,
|
||||
)
|
||||
}}
|
||||
</template>
|
||||
</OverflowMenu>
|
||||
</ButtonStyled>
|
||||
},
|
||||
{
|
||||
id: 'create-shortcut',
|
||||
label: formatMessage(messages.createShortcut),
|
||||
shown: !!shortcutInstanceId && !quarantined,
|
||||
action: () => createShortcut(),
|
||||
},
|
||||
{
|
||||
type: 'divider',
|
||||
shown: !instanceId,
|
||||
},
|
||||
{
|
||||
id: 'delete',
|
||||
label: formatMessage(
|
||||
world.type === 'server' ? commonMessages.removeButton : commonMessages.deleteLabel,
|
||||
),
|
||||
tone: 'red',
|
||||
action: () => emit('delete'),
|
||||
shown: !instanceId,
|
||||
disabled: locked || managed,
|
||||
tooltip: locked
|
||||
? formatMessage(messages.worldInUse)
|
||||
: managed
|
||||
? formatMessage(messages.linkedServer)
|
||||
: undefined,
|
||||
},
|
||||
]"
|
||||
>
|
||||
<MoreVerticalIcon aria-hidden="true" />
|
||||
<template #play-instance>
|
||||
<PlayIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.playInstance) }}
|
||||
</template>
|
||||
<template #open-instance>
|
||||
<EyeIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.viewInstance) }}
|
||||
</template>
|
||||
<template #edit>
|
||||
<EditIcon aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.editButton) }}
|
||||
</template>
|
||||
<template #open-folder>
|
||||
<FolderOpenIcon aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.openFolderButton) }}
|
||||
</template>
|
||||
<template #copy-address>
|
||||
<ClipboardCopyIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.copyAddress) }}
|
||||
</template>
|
||||
<template #refresh>
|
||||
<UpdatedIcon aria-hidden="true" />
|
||||
{{ formatMessage(commonMessages.refreshButton) }}
|
||||
</template>
|
||||
<template #create-shortcut>
|
||||
<ExternalIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.createShortcut) }}
|
||||
</template>
|
||||
<template #dont-show-on-home>
|
||||
<XIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.dontShowOnHome) }}
|
||||
</template>
|
||||
<template #delete>
|
||||
<TrashIcon aria-hidden="true" />
|
||||
{{
|
||||
formatMessage(
|
||||
world.type === 'server' ? commonMessages.removeButton : commonMessages.deleteLabel,
|
||||
)
|
||||
}}
|
||||
</template>
|
||||
</TeleportOverflowMenu>
|
||||
</div>
|
||||
</div>
|
||||
</SmartClickable>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
import { PlayIcon, PlusIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
Button,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
injectNotificationManager,
|
||||
@@ -96,24 +96,18 @@ defineExpose({ show, hide })
|
||||
/>
|
||||
<template #actions>
|
||||
<div class="flex gap-2 justify-end">
|
||||
<ButtonStyled type="outlined">
|
||||
<button @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>
|
||||
<Button type="outlined" @click="hide()">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</Button>
|
||||
<Button :disabled="!address" @click="addServer(false)">
|
||||
<PlusIcon />
|
||||
{{ formatMessage(messages.addServer) }}
|
||||
</Button>
|
||||
<Button type="colored" color="brand" :disabled="!address" @click="addServer(true)">
|
||||
<PlayIcon />
|
||||
{{ formatMessage(messages.addAndPlay) }}
|
||||
</Button>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import { TrashIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
Admonition,
|
||||
ButtonStyled,
|
||||
Button,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
NewModal,
|
||||
@@ -106,18 +106,19 @@ defineExpose({ show, hide })
|
||||
|
||||
<template #actions>
|
||||
<div class="flex gap-2 justify-end">
|
||||
<ButtonStyled type="outlined">
|
||||
<button @click="hide">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="red">
|
||||
<button :disabled="!isServer && !isSingleplayer" @click="confirm">
|
||||
<TrashIcon />
|
||||
{{ formatMessage(actionMessage) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="outlined" @click="hide">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</Button>
|
||||
<Button
|
||||
type="colored"
|
||||
color="red"
|
||||
:disabled="!isServer && !isSingleplayer"
|
||||
@click="confirm"
|
||||
>
|
||||
<TrashIcon />
|
||||
{{ formatMessage(actionMessage) }}
|
||||
</Button>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
import { SaveIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
Button,
|
||||
commonMessages,
|
||||
defineMessage,
|
||||
injectNotificationManager,
|
||||
@@ -105,18 +105,14 @@ const titleMessage = defineMessage({
|
||||
<HideFromHomeOption v-model="hideFromHome" class="mt-3" />
|
||||
<template #actions>
|
||||
<div class="flex gap-2 justify-end">
|
||||
<ButtonStyled type="outlined">
|
||||
<button @click="hide()">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand">
|
||||
<button :disabled="!address" @click="saveServer">
|
||||
<SaveIcon />
|
||||
{{ formatMessage(commonMessages.saveChangesButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="outlined" @click="hide()">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</Button>
|
||||
<Button type="colored" color="brand" :disabled="!address" @click="saveServer">
|
||||
<SaveIcon />
|
||||
{{ formatMessage(commonMessages.saveChangesButton) }}
|
||||
</Button>
|
||||
</div>
|
||||
</template>
|
||||
</NewModal>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import { ChevronRightIcon, SaveIcon, UndoIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
Button,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
injectNotificationManager,
|
||||
@@ -113,24 +113,18 @@ const messages = defineMessages({
|
||||
<HideFromHomeOption v-model="hideFromHome" class="mt-3" />
|
||||
</div>
|
||||
<div class="flex gap-2 mt-4">
|
||||
<ButtonStyled color="brand">
|
||||
<button @click="saveWorld">
|
||||
<SaveIcon />
|
||||
{{ formatMessage(commonMessages.saveChangesButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<button :disabled="removeIcon || !icon" @click="removeIcon = true">
|
||||
<UndoIcon />
|
||||
{{ formatMessage(messages.resetIcon) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled>
|
||||
<button @click="hide()">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<Button type="colored" color="brand" @click="saveWorld">
|
||||
<SaveIcon />
|
||||
{{ formatMessage(commonMessages.saveChangesButton) }}
|
||||
</Button>
|
||||
<Button :disabled="removeIcon || !icon" @click="removeIcon = true">
|
||||
<UndoIcon />
|
||||
{{ formatMessage(messages.resetIcon) }}
|
||||
</Button>
|
||||
<Button @click="hide()">
|
||||
<XIcon />
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</Button>
|
||||
</div>
|
||||
</ModalWrapper>
|
||||
</template>
|
||||
|
||||
@@ -404,8 +404,6 @@ export async function useInstallJobNotifications(opts: {
|
||||
}
|
||||
|
||||
function getProgress(job: InstallJobSnapshot): number {
|
||||
if (job.status === 'succeeded') return 1
|
||||
if (job.status === 'failed' || job.status === 'interrupted') return 0
|
||||
const progress = getEffectiveProgress(job)
|
||||
if (!progress || progress.total <= 0) return 0
|
||||
return Math.max(0, Math.min(1, progress.current / progress.total))
|
||||
@@ -526,8 +524,12 @@ export async function useInstallJobNotifications(opts: {
|
||||
)
|
||||
}
|
||||
|
||||
const activeJobs = computed(() =>
|
||||
jobs.value.filter((job) => job.status === 'queued' || job.status === 'running'),
|
||||
)
|
||||
|
||||
const progressItems = computed<PopupNotificationProgressItem[]>(() =>
|
||||
jobs.value.map((job) => {
|
||||
activeJobs.value.map((job) => {
|
||||
const progress = getEffectiveProgress(job)
|
||||
|
||||
return {
|
||||
@@ -536,20 +538,26 @@ export async function useInstallJobNotifications(opts: {
|
||||
text: getText(job),
|
||||
iconUrl: iconUrls.value[job.job_id] ?? null,
|
||||
progress: getProgress(job),
|
||||
waiting: !job.progress && ['queued', 'running'].includes(job.status),
|
||||
showProgress: !isTerminalJob(job),
|
||||
wrapText: isTerminalJob(job),
|
||||
progressType: isTerminalJob(job) ? undefined : getProgressType(job),
|
||||
progressCurrent: isTerminalJob(job) ? undefined : progress?.current,
|
||||
progressTotal: isTerminalJob(job) ? undefined : progress?.total,
|
||||
waiting: !job.progress && job.status === 'running',
|
||||
showProgress: job.status === 'running',
|
||||
progressType: getProgressType(job),
|
||||
progressCurrent: progress?.current,
|
||||
progressTotal: progress?.total,
|
||||
buttons: getButtons(job),
|
||||
dismissible: isTerminalJob(job),
|
||||
onDismiss: getDismissHandler(job),
|
||||
}
|
||||
}),
|
||||
)
|
||||
|
||||
const buttons = computed<PopupNotificationButton[] | undefined>(() => undefined)
|
||||
const terminalNotifications = computed(() =>
|
||||
jobs.value.filter(isTerminalJob).map((job) => ({
|
||||
id: job.job_id,
|
||||
title: getTitle(job),
|
||||
text: getText(job),
|
||||
type: job.status === 'failed' ? ('error' as const) : ('warning' as const),
|
||||
buttons: getButtons(job),
|
||||
onDismiss: getDismissHandler(job),
|
||||
})),
|
||||
)
|
||||
|
||||
async function refreshMetadata(notify = true) {
|
||||
const request = ++metadataRequest
|
||||
@@ -631,10 +639,10 @@ export async function useInstallJobNotifications(opts: {
|
||||
await refresh(false)
|
||||
|
||||
return {
|
||||
active: computed(() => jobs.value.length > 0),
|
||||
active: computed(() => activeJobs.value.length > 0),
|
||||
title: computed(() => formatMessage(messages.installs)),
|
||||
progressItems,
|
||||
buttons,
|
||||
terminalNotifications,
|
||||
refresh,
|
||||
dispose: () => {
|
||||
for (const timeout of copiedResetTimeouts.values()) {
|
||||
|
||||
@@ -17,6 +17,7 @@ import { kill, list as listInstances } from '@/helpers/instance'
|
||||
import { get_by_instance_id } from '@/helpers/process'
|
||||
import type { GameInstance } from '@/helpers/types'
|
||||
import { add_server_to_instance, getServerAddress } from '@/helpers/worlds'
|
||||
import { instanceKeys } from '@/pages/instance/query-options'
|
||||
|
||||
interface BrowseServerInstance {
|
||||
id: string
|
||||
@@ -38,7 +39,7 @@ interface ContextMenuOptionClick {
|
||||
}
|
||||
|
||||
export interface UseAppServerBrowseOptions {
|
||||
instance: Ref<BrowseServerInstance | null>
|
||||
instance: Readonly<Ref<BrowseServerInstance | null>>
|
||||
isFromWorlds: ComputedRef<boolean>
|
||||
allInstalledIds: ComputedRef<Set<string>>
|
||||
newlyInstalled: Ref<string[]>
|
||||
@@ -131,7 +132,7 @@ export function useAppServerBrowse(options: UseAppServerBrowseOptions) {
|
||||
project.minecraft_java_server?.content?.kind,
|
||||
)
|
||||
options.newlyInstalled.value.push(project.project_id)
|
||||
await queryClient.invalidateQueries({ queryKey: ['worlds', instanceId] })
|
||||
await queryClient.invalidateQueries({ queryKey: instanceKeys.worlds(instanceId) })
|
||||
} catch (error) {
|
||||
options.handleError(error)
|
||||
}
|
||||
|
||||
@@ -8,8 +8,27 @@ export async function init_ads_window(overrideShown = false) {
|
||||
})
|
||||
}
|
||||
|
||||
export async function show_ads_window() {
|
||||
return await invoke('plugin:ads|show_ads_window', { dpr: window.devicePixelRatio })
|
||||
let adsWindowHoldUpdate = Promise.resolve()
|
||||
|
||||
async function update_ads_window_hold(acquire) {
|
||||
adsWindowHoldUpdate = adsWindowHoldUpdate
|
||||
.catch(() => {})
|
||||
.then(() =>
|
||||
invoke('plugin:ads|update_ads_window_hold', {
|
||||
acquire,
|
||||
dpr: window.devicePixelRatio,
|
||||
}),
|
||||
)
|
||||
|
||||
return await adsWindowHoldUpdate
|
||||
}
|
||||
|
||||
export async function take_ads_window_hold() {
|
||||
return await update_ads_window_hold(true)
|
||||
}
|
||||
|
||||
export async function release_ads_window_hold() {
|
||||
return await update_ads_window_hold(false)
|
||||
}
|
||||
|
||||
export async function hide_ads_window(reset) {
|
||||
|
||||
@@ -51,7 +51,8 @@ export async function loadInstanceContentData(
|
||||
}
|
||||
|
||||
function handleLoadError(error: unknown, onError?: (error: Error) => unknown) {
|
||||
onError?.(error as Error)
|
||||
if (!onError) throw error
|
||||
onError(error as Error)
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
@@ -77,6 +77,10 @@ export async function get_content_items(
|
||||
return await invoke('plugin:instance|instance_get_content_items', { instanceId, cacheBehaviour })
|
||||
}
|
||||
|
||||
export async function refresh_content_updates(instanceId: string): Promise<void> {
|
||||
return await invoke('plugin:instance|instance_refresh_content_updates', { instanceId })
|
||||
}
|
||||
|
||||
// Linked modpack info returned from backend
|
||||
export interface LinkedModpackInfo {
|
||||
project: Labrinth.Projects.v2.Project
|
||||
@@ -282,12 +286,13 @@ export async function update_repair_modrinth(instanceId: string): Promise<Instal
|
||||
}
|
||||
|
||||
// Export an instance to .mrpack
|
||||
// included_overrides is an array of paths to override folders to include (ie: 'mods', 'resource_packs')
|
||||
// included_overrides and excluded_overrides are inherited path rules for files in the export.
|
||||
// Version id is optional (ie: 1.1.5)
|
||||
export async function export_instance_mrpack(
|
||||
instanceId: string,
|
||||
exportLocation: string,
|
||||
includedOverrides: string[],
|
||||
excludedOverrides: string[],
|
||||
versionId?: string,
|
||||
description?: string,
|
||||
name?: string,
|
||||
@@ -296,22 +301,33 @@ export async function export_instance_mrpack(
|
||||
instanceId,
|
||||
exportLocation,
|
||||
includedOverrides,
|
||||
excludedOverrides,
|
||||
versionId,
|
||||
description,
|
||||
name,
|
||||
})
|
||||
}
|
||||
|
||||
// Given a folder path, populate an array of all the subfolders
|
||||
// Intended to be used for finding potential override folders
|
||||
// profile
|
||||
// -- mods
|
||||
// -- resourcepacks
|
||||
// -- file1
|
||||
// => [mods, resourcepacks]
|
||||
// allows selection for 'included_overrides' in export_instance_mrpack
|
||||
export async function get_pack_export_candidates(instanceId: string): Promise<string[]> {
|
||||
return await invoke('plugin:instance|instance_get_pack_export_candidates', { instanceId })
|
||||
export type PackExportCandidate = {
|
||||
path: string
|
||||
type: 'directory' | 'file'
|
||||
size?: number
|
||||
modified?: number
|
||||
count?: number
|
||||
disabled: boolean
|
||||
defaultSelected: boolean
|
||||
}
|
||||
|
||||
// Given a folder path, populate an array of exportable direct children.
|
||||
// Allows selection for 'included_overrides' in export_instance_mrpack.
|
||||
export async function get_pack_export_candidates(
|
||||
instanceId: string,
|
||||
parent?: string,
|
||||
): Promise<PackExportCandidate[]> {
|
||||
return await invoke('plugin:instance|instance_get_pack_export_candidates', {
|
||||
instanceId,
|
||||
parent: parent ?? null,
|
||||
})
|
||||
}
|
||||
|
||||
// Run Minecraft using an instance
|
||||
|
||||
@@ -435,11 +435,12 @@ export async function refreshServerData(
|
||||
}
|
||||
}
|
||||
|
||||
export function refreshServers(
|
||||
export async function refreshServers(
|
||||
worlds: World[],
|
||||
serverData: Record<string, ServerData>,
|
||||
protocolVersion: ProtocolVersion | null,
|
||||
) {
|
||||
ping = true,
|
||||
): Promise<void> {
|
||||
const servers = worlds.filter(isServerWorld)
|
||||
servers.forEach((server) => {
|
||||
if (!serverData[server.address]) {
|
||||
@@ -451,9 +452,14 @@ export function refreshServers(
|
||||
}
|
||||
})
|
||||
|
||||
// noinspection ES6MissingAwait - handled by refreshServerData
|
||||
Object.keys(serverData).forEach((address) =>
|
||||
refreshServerData(serverData[address], protocolVersion, address),
|
||||
if (!ping) {
|
||||
return
|
||||
}
|
||||
|
||||
await Promise.all(
|
||||
Object.keys(serverData).map((address) =>
|
||||
refreshServerData(serverData[address], protocolVersion, address),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -134,21 +134,12 @@
|
||||
"app.ads-consent.reject": {
|
||||
"message": "رفض الكل"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "يتيح العرض المتقدم لتأثيرات مثل التشويش الذي قد تسبب مشكلات في الأداء دون استخدام العرض المسرع بالأجهزة."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "العرض المتقدم"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "اختر لون سمتك المفضل من أجل تطبيق Modrinth App."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "لون السمة"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "غير الصفحة التي يفتح عليها المشغل."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "صفحة الرئيسية"
|
||||
},
|
||||
@@ -158,50 +149,23 @@
|
||||
"app.appearance-settings.default-landing-page.title": {
|
||||
"message": "الصفحة الرئيسة الافتراضية"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "ألغ تفعيل عرض الاسم فوق لاعبك في صفحة المظاهر."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "إخفاء عرض الاسم"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "يتضمن العوالم الحديثة في قسم \"العودة إلى اللعب\" على الصفحة الرئيسية."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "العودة إلى العوالم"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "قم بتصغير نافذة المشغل عند بدء تشغيل عملية Minecraft."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "تصغير نافذة المشغل"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "استخدام إطار نافذة النظام (يتطلب إعادة تشغيل التطبيق)."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "الزخارف التقليدية"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "يعرض مقدار الوقت الذي قضيته في لعب إحدى المهام."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "إظهار مدة التشغيل"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "يتخطى تلقائيًا عمليات التأكيد ذات المخاطر المنخفضة، مثل تثبيت حزم التعديلات المكررة، وحذف المحتوى العادي، والتحديثات الجماعية، وإلغاء ربط حزم التعديلات، ومطالبات الإصلاح. وسيستمر عرض التحذيرات الخطيرة."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "تخطي التحذيرات غير الضرورية"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "يتيح إمكانية إظهار الشريط الجانبي أو إخفائه."
|
||||
"message": "قم بإخفاء الشريط الجانبي الأيمن افتراضيًا وأضف زرًا لإظهاره أو إخفائه."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "تبديل الشريط الجانبي"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "إذا حاولت تثبيت ملف Modrinth Pack (.mrpack) غير مستضاف على Modrinth، فسنتأكد من أنك على دراية بالمخاطر قبل تثبيته."
|
||||
"message": "قم بإخفاء الشريط الجانبي الأيمن"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "أخبرني قبل تثبيت حزم التعديلات غير المعروفة"
|
||||
@@ -488,9 +452,6 @@
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "المظهر"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "خيارات النسخة الافتراضية"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "تثبيتات جافا"
|
||||
},
|
||||
|
||||
@@ -14,6 +14,9 @@
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Zkopírováno"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Kopírovat detaily"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Zavřít"
|
||||
},
|
||||
@@ -26,6 +29,9 @@
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Zrušeno"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "Čištění nebylo dokončeno"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Neznámá instance"
|
||||
},
|
||||
@@ -65,21 +71,15 @@
|
||||
"app.action-bar.view-logs": {
|
||||
"message": "Zobrazit logy"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Povolí pokročilé vykreslování, například efekty rozmazání, které mohou bez hardwarového zrychlení způsobovat problémy s výkonem."
|
||||
"app.ads-consent.title": {
|
||||
"message": "Vaše soukromí a způsob, jakým reklamy podporují Modrinth"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Pokročilé vykreslování"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Vyberte si váš preferovaný motiv pro aplikaci Modrinth."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Barevný motiv"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Změňte stránku, která se otevře po spuštění launcheru."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Domů"
|
||||
},
|
||||
@@ -89,51 +89,18 @@
|
||||
"app.appearance-settings.default-landing-page.title": {
|
||||
"message": "Výchozí stránka po spuštění"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Zakáže zobrazení jmenovky nad vaší postavou na stránce skinů."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Skrýt jmenovku"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Zahrne nedávné světy do sekce „Vrátit se do hry“ na domovské stránce."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Rychlý návrat do světů"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Minimalizovat launcher při spuštění Minecraftu."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Minimalizovat launcher"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Použít systémový rámeček okna (vyžaduje restart aplikace)."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Systémové dekorace"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Zobrazuje, kolik času jsi strávil hraním instance."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Zobrazit odehraný čas"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Automaticky přeskočí nízko riziková potrvzení jako duplicitní instalace modpacků, běžné mazání obsahu, hromadné aktualizace, odpojování modpacků a výzvy k opravě. Nebezpečná upozornění se budou nadále zobrazovat."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Přeskočit nedůležitá upozornění"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Umožňí přepínat zobrazení postranního panelu."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Přepnout postranní panel"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Pokud se pokusíte nainstalovat soubor Modrinth Pack (.mrpack), který není hostován na Modrinth, zajistíme, abyste si před instalací uvědomili související rizika."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "Upozorni mě před instalací neznámých modpacků"
|
||||
},
|
||||
@@ -254,6 +221,9 @@
|
||||
"app.install.phase.running_loader_processors": {
|
||||
"message": "Spuštění loader procesů"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.removed-label": {
|
||||
"message": "Odstraněno"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Všechna data tvé instance budou trvale smazána, včetně světů, konfigurací a veškerého nainstalovaného obsahu."
|
||||
},
|
||||
@@ -401,9 +371,6 @@
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Vzhled"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Výchozí možnosti instance"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Instalace Javy"
|
||||
},
|
||||
|
||||
@@ -89,6 +89,9 @@
|
||||
"app.action-bar.install.updating-shared-content": {
|
||||
"message": "Opdatere delt indhold"
|
||||
},
|
||||
"app.action-bar.installs": {
|
||||
"message": "Installeringer"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "Gør til primære instance"
|
||||
},
|
||||
@@ -131,21 +134,15 @@
|
||||
"app.ads-consent.reject": {
|
||||
"message": "Afvis alle"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Aktiverer avanceret gengivelse som sløringseffekter, der kan forårsage ydelsesproblemer uden hardwareaccelereret gengivelse."
|
||||
"app.ads-consent.title": {
|
||||
"message": "Dit privatliv og hvordan reklamer hjælper Modrinth"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Avanceret rendering"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Vælg dit foretrukne farvetema til Modrinth App."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Farvetema"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Skift hvilken side launcheren åbner i."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Hjem"
|
||||
},
|
||||
@@ -155,38 +152,23 @@
|
||||
"app.appearance-settings.default-landing-page.title": {
|
||||
"message": "Standard startside"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Slår nametagget over din spiller på skins siden fra."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Gem nametag"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Inkluderer de sidste verdener i afsnittet \"Hop tilbage\" på startsiden."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Hop tilbage ind i verdener"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Minimer launcheren når Minecraft starter."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Minimer launcher"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Vis hvor meget tid du har brugt på at spille en instance."
|
||||
"message": "Minimer app"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Vis tid spillet"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Aktivere muligheden for at slå sidepanelet til og fra."
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Spring ikke nødvendige advarseler over"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Slå sidepanel til og fra"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Hvis du prøver at installere en Modrinth Pack fil (.mrpack) som ikke er hosted på Modrinth, så skal vi nok sikre os du forstår riskoen før du installere den."
|
||||
"message": "Gem højre sidebar"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "Advar mig før jeg installere en ukendt modpacks"
|
||||
@@ -197,6 +179,9 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Kan ikke nå autentificeringsservere"
|
||||
},
|
||||
"app.behavior-settings.content.title": {
|
||||
"message": "Hjem og indhold"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "Tilføjet server til instance"
|
||||
},
|
||||
@@ -218,12 +203,18 @@
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "Tilbage til instance"
|
||||
},
|
||||
"app.browse.discover-project-type": {
|
||||
"message": "Udforsk {projectType}"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Opdag servere"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Gem servere som allerede er tilføjet"
|
||||
},
|
||||
"app.browse.hide-installed-modpacks": {
|
||||
"message": "Skjul allerede installeret"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpacks"
|
||||
},
|
||||
@@ -263,12 +254,60 @@
|
||||
"app.install.phase.downloading_minecraft": {
|
||||
"message": "Downloader Minecraft"
|
||||
},
|
||||
"app.install.phase.finalizing": {
|
||||
"message": "Færdiggører"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "I kø til at intallere"
|
||||
},
|
||||
"app.install.phase.preparing_java": {
|
||||
"message": "Forbereder Java"
|
||||
},
|
||||
"app.install.phase.preparing_java.downloading": {
|
||||
"message": "Downloader Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.extracting": {
|
||||
"message": "Udpakker Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.fetching-metadata": {
|
||||
"message": "Henter Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.resolving": {
|
||||
"message": "Forbereder Java {version}"
|
||||
},
|
||||
"app.install.phase.preparing_java.validating": {
|
||||
"message": "Validerer Java {version}"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.added-label": {
|
||||
"message": "Tilføjet"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.publish-button": {
|
||||
"message": "Skub opdatering"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.publishing-button": {
|
||||
"message": "Skubber..."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.removed-label": {
|
||||
"message": "Fjernet"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-admonition-header": {
|
||||
"message": "Skub opdatering"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-header": {
|
||||
"message": "Gennemså ændringer"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-update-button": {
|
||||
"message": "Gennemgå opdatering"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.reviewing-button": {
|
||||
"message": "Gennemgår..."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-body": {
|
||||
"message": "En opdatering er krævet for at spille {name}. Venligst opdater til den seneste version for at køre spillet."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-header": {
|
||||
"message": "En opdatering er tilgængelig"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
@@ -299,6 +338,9 @@
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "projekt"
|
||||
},
|
||||
"app.instance.mods.locked-content": {
|
||||
"message": "Indhold i låste instances kan ikke blive ændret."
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "\"{name}\" blev tilføjet"
|
||||
},
|
||||
@@ -314,6 +356,18 @@
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Uploadet"
|
||||
},
|
||||
"app.instance.share.empty.description": {
|
||||
"message": "Du kan ændre denne instance med dine venner!"
|
||||
},
|
||||
"app.instance.share.empty.heading": {
|
||||
"message": "Ingen venner inviteret"
|
||||
},
|
||||
"app.instance.share.empty.invite-friends-button": {
|
||||
"message": "Inviter venner"
|
||||
},
|
||||
"app.instance.share.invite-modal.heading": {
|
||||
"message": "Del {name}"
|
||||
},
|
||||
"app.instance.share.locked.empty-description-suffix": {
|
||||
"message": "for at tilgå denne side."
|
||||
},
|
||||
@@ -329,6 +383,12 @@
|
||||
"app.instance.share.remove-user-modal.effects-label": {
|
||||
"message": "Hvad vil der ske?"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.header": {
|
||||
"message": "Fjern adgang"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.remove-button": {
|
||||
"message": "Fjern adgang"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.user-avatar-alt": {
|
||||
"message": "{username}'s avatar"
|
||||
},
|
||||
@@ -461,9 +521,6 @@
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Udseende"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Standardindstillinger for instans"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Javainstallationer"
|
||||
},
|
||||
@@ -1085,9 +1142,6 @@
|
||||
"minecraft-required.sign-in": {
|
||||
"message": "Log ind på Microsoft"
|
||||
},
|
||||
"modal.modrinth-account-required.cancel-button": {
|
||||
"message": "Annuller"
|
||||
},
|
||||
"modal.modrinth-account-required.continue-in-browser-heading": {
|
||||
"message": "Fortsæt i din browser"
|
||||
},
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"message": "Kopiert"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Kopier Details"
|
||||
"message": "Details kopieren"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Ignorieren"
|
||||
@@ -27,16 +27,16 @@
|
||||
"message": "Wiederholen"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Abbroche will app gschlosse worde isch"
|
||||
"message": "Aufgrund von Schließung der App abgebrochen"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "Modpack kud nöd glese werde"
|
||||
"message": "Modpack konnte nicht gelesen werden"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Abbroche"
|
||||
"message": "Abgebrochen"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "Ufrume kunnti nöt beendet werde"
|
||||
"message": "Bereinigung konnte nicht abgeschlossen werden"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Dateien konnten nicht heruntergeladen werden"
|
||||
@@ -144,19 +144,19 @@
|
||||
"message": "Deine Privatsphäre und wie Werbung Modrinth unterstützt"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Aktiviert erweiterte Rendering-Funktionen wie Unschärfeeffekte, welche ohne hardwarebeschleunigtes Rendering zu Leistungsproblemen führen können."
|
||||
"message": "Visuelle Effekte wie Hintergrundunschärfe aktivieren. Ohne Hardwarebeschleunigung kann dies die Leistung beeinträchtigen."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Erweitertes Rendering"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Wähle dein bevorzugtes Farbschema für die Modrinth App."
|
||||
"message": "Wähle das Farbschema der Modrinth App aus."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Farbschema"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Ändere die Seite, die beim Öffnen des Launchers angezeigt wird."
|
||||
"message": "Wähle die Seite, die beim Öffnen der Modrinth App erscheint."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Start"
|
||||
@@ -168,49 +168,49 @@
|
||||
"message": "Standard-Startseite"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Deaktiviert das Namensschild über deinem Spieler auf der Skin-Seite."
|
||||
"message": "Verbirgt deinen Benutzernamen über der Spielervorschau auf der Skin-Auswahlseite."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Namensschild ausblenden"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Enthält zuletzt gespielte Welten im Abschnitt „Direkt weiterspielen“ auf der Startseite."
|
||||
"message": "Zeigt deine zuletzt gespielten Welten in der Sektion „Direkt in Welten weiterspielen“ auf der Startseite an."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Springe zurück in Welten"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Den Launcher minimieren, wenn ein Minecraft-Prozess gestartet wird."
|
||||
"message": "Minimiere die Modrinth App, wenn Minecraft startet."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Launcher minimieren"
|
||||
"message": "App minimieren"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Systemfensterrahmen verwenden (Neustart der App erforderlich)."
|
||||
"message": "Nutzt die Titelleiste und Fenstersteuerung deines Betriebssystems. Erfordert einen App-Neustart."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Native Dekorationen"
|
||||
"message": "System-Fensterrahmen"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Zeigt an, wie viel Zeit du mit dem Spielen einer Instanz verbracht hast."
|
||||
"message": "Zeigt, wie lange du jede einzelne Instanz gespielt hast."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Spielzeit anzeigen"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Bestätigungen mit geringem Risiko, wie z. B. die Installation doppelter Modpacks, das Löschen normaler Inhalte, Massenaktualisierungen, das Aufheben von Verknüpfungen zu Modpacks und Reparaturaufrufe, werden automatisch übersprungen. Gefährliche Warnungen werden weiterhin angezeigt."
|
||||
"message": "Bestätigungen für risikoarme Aktionen überspringen (z. B. doppelte Installationen, normales Löschen, Massen-Updates, Entkoppeln und Reparieren). Warnungen für gefährliche Aktionen werden weiterhin angezeigt."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Unwichtige Warnungen überspringen"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Ermöglicht das Umschalten der Seitenleiste."
|
||||
"message": "Blendet die rechte Seitenleiste standardmäßig aus und fügt einen Button zum Ein- oder Ausblenden hinzu."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Seitenleiste umschalten"
|
||||
"message": "Rechte Seitenleiste ausblenden"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Falls du versuchst, eine Modrinth-Pack-Datei (.mrpack) zu installieren, die nicht auf Modrinth gehostet wird, werden wir sicherstellen, dass du die Risiken vor der Installation verstehst."
|
||||
"message": "Zeige eine Sicherheitswarnung an, bevor ein Modrinth-Paket (.mrpack) installiert wird, welches nicht auf Modrinth gehostet wird."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "Warne mich, bevor unbekannte Modpacks installiert werden"
|
||||
@@ -221,6 +221,15 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Authentifizierungsserver sind nicht erreichbar"
|
||||
},
|
||||
"app.behavior-settings.confirmations.title": {
|
||||
"message": "Bestätigungen"
|
||||
},
|
||||
"app.behavior-settings.content.title": {
|
||||
"message": "Startseite & Inhalte"
|
||||
},
|
||||
"app.behavior-settings.startup-and-navigation.title": {
|
||||
"message": "Start & Navigation"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "Server zu Instanz hinzufügen"
|
||||
},
|
||||
@@ -242,12 +251,18 @@
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "Zu Instanz zurückgehen"
|
||||
},
|
||||
"app.browse.discover-project-type": {
|
||||
"message": "{projectType} entdecken"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Server entdecken"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Bereits hinzugefügte Server ausblenden"
|
||||
},
|
||||
"app.browse.hide-installed-modpacks": {
|
||||
"message": "Bereits installiert ausblenden"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpacks"
|
||||
},
|
||||
@@ -362,9 +377,18 @@
|
||||
"app.instance.admonitions.shared-instance.review-header": {
|
||||
"message": "Änderungen überprüfen"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-update-button": {
|
||||
"message": "Update überprüfen"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.reviewing-button": {
|
||||
"message": "Wird überprüft..."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-body": {
|
||||
"message": "Ein Update ist erforderlich, um {name} zu spielen. Bitte aktualisiere auf die neueste Version, um das Spiel zu starten."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-header": {
|
||||
"message": "Ein Update ist verfügbar"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Alle Daten deiner Instanz werden permanent gelöscht, inlusive deiner Welten, Konfigurationen und allen installierten Inhalten."
|
||||
},
|
||||
@@ -431,6 +455,9 @@
|
||||
"app.instance.share.invite-modal.heading": {
|
||||
"message": "{name} teilen"
|
||||
},
|
||||
"app.instance.share.invite-modal.user-limit-reached": {
|
||||
"message": "Diese Instanz hat das Nutzerlimit von {limit} erreicht."
|
||||
},
|
||||
"app.instance.share.locked.empty-description-prefix": {
|
||||
"message": "Du musst dich als"
|
||||
},
|
||||
@@ -449,6 +476,12 @@
|
||||
"app.instance.share.locked.wrong-account-heading": {
|
||||
"message": "Falsches Konto"
|
||||
},
|
||||
"app.instance.share.members.empty": {
|
||||
"message": "Es sind noch keine Benutzer beigetreten"
|
||||
},
|
||||
"app.instance.share.members.no-filter-results": {
|
||||
"message": "Keine Benutzer passen zu deinen Filtern."
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-access": {
|
||||
"message": "Diese Person wird für diese geteilte Instanz keine Updates mehr erhalten"
|
||||
},
|
||||
@@ -479,6 +512,12 @@
|
||||
"app.instance.share.sign-in.button": {
|
||||
"message": "Anmelden"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.description": {
|
||||
"message": "Der Dienst für geteilte Instanzen ist derzeit nicht erreichbar; bitte versuche es später erneut"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.heading": {
|
||||
"message": "Verbindung nicht möglich"
|
||||
},
|
||||
"app.instance.share.unlink.body": {
|
||||
"message": "Du musst die Verknüpfung zu diesem Modpack trennen, um deine Instanz zu teilen"
|
||||
},
|
||||
@@ -551,6 +590,9 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "Keine Server oder Welten hinzugefügt"
|
||||
},
|
||||
"app.instance.worlds.refreshing": {
|
||||
"message": "Wird aktualisiert..."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "Server entfernen"
|
||||
},
|
||||
@@ -566,12 +608,60 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Durchsuche {count} Welten..."
|
||||
},
|
||||
"app.java-detection.cancel": {
|
||||
"message": "Abbrechen"
|
||||
},
|
||||
"app.java-detection.columns.actions": {
|
||||
"message": "Aktionen"
|
||||
},
|
||||
"app.java-detection.columns.path": {
|
||||
"message": "Pfad"
|
||||
},
|
||||
"app.java-detection.columns.version": {
|
||||
"message": "Version"
|
||||
},
|
||||
"app.java-detection.no-installations-found": {
|
||||
"message": "Keine Java Installationen gefunden."
|
||||
},
|
||||
"app.java-detection.select": {
|
||||
"message": "Auswählen"
|
||||
},
|
||||
"app.java-detection.selected": {
|
||||
"message": "Ausgewählt"
|
||||
},
|
||||
"app.java-detection.title": {
|
||||
"message": "Java-Installation auswählen"
|
||||
},
|
||||
"app.java-selector.already-installed": {
|
||||
"message": "Bereits installiert"
|
||||
},
|
||||
"app.java-selector.browse": {
|
||||
"message": "Durchsuchen"
|
||||
},
|
||||
"app.java-selector.detect": {
|
||||
"message": "Erkennen"
|
||||
},
|
||||
"app.java-selector.install-recommended": {
|
||||
"message": "Empfohlenes installieren"
|
||||
},
|
||||
"app.java-selector.installing": {
|
||||
"message": "Installiere..."
|
||||
},
|
||||
"app.java-selector.path.placeholder": {
|
||||
"message": "/path/to/java"
|
||||
},
|
||||
"app.java-selector.test-installation": {
|
||||
"message": "Java-Installation testen"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context": {
|
||||
"message": "Zusätzlicher Kontext"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context-placeholder": {
|
||||
"message": "Füge gegebenenfalls relevante Links und Bilder hinzu"
|
||||
},
|
||||
"app.modal.install-to-play.block-user": {
|
||||
"message": "Benutzer blockieren"
|
||||
},
|
||||
"app.modal.install-to-play.content-you-are-reporting": {
|
||||
"message": "Die Instanz, die du meldest"
|
||||
},
|
||||
@@ -593,6 +683,9 @@
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Diese Einladung wurde von einem anderen Modrinth-Nutzer erstellt, nicht von Modrinth. Nimm nur Einladungen von Personen an, denen du vertraust."
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning-with-creator": {
|
||||
"message": "Diese Einladung wurde von <creator>{username}</creator> erstellt, nicht von Modrinth. Akzeptierte nur Einladungen von Leuten, denen du vertraust."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# Mod} other {# Mods}}"
|
||||
},
|
||||
@@ -650,6 +743,9 @@
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Nicht erkannte Dateien"
|
||||
},
|
||||
"app.modal.install-to-play.user-blocked": {
|
||||
"message": "Benutzer blockiert"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Inhalte ansehen"
|
||||
},
|
||||
@@ -677,6 +773,36 @@
|
||||
"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.nav.create-new-instance": {
|
||||
"message": "Neue Instanz erstellen"
|
||||
},
|
||||
"app.nav.home": {
|
||||
"message": "Startseite"
|
||||
},
|
||||
"app.nav.library": {
|
||||
"message": "Bibliothek"
|
||||
},
|
||||
"app.nav.modrinth-account": {
|
||||
"message": "Modrinth-Konto"
|
||||
},
|
||||
"app.nav.modrinth-hosting": {
|
||||
"message": "Modrinth Hosting"
|
||||
},
|
||||
"app.nav.sign-in-to-modrinth-account": {
|
||||
"message": "Bei einem Modrinth-Konto anmelden"
|
||||
},
|
||||
"app.nav.signed-in-as": {
|
||||
"message": "Angemeldet als <user>{username}</user>"
|
||||
},
|
||||
"app.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Auf Modrinth+ upgraden"
|
||||
},
|
||||
"app.news.title": {
|
||||
"message": "Neuigkeiten"
|
||||
},
|
||||
"app.news.view-all": {
|
||||
"message": "Alle Neuigkeiten anzeigen"
|
||||
},
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Dieses Projekt ist bereits installiert"
|
||||
},
|
||||
@@ -686,6 +812,9 @@
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Zurück zu Entdecken"
|
||||
},
|
||||
"app.project.install-context.back-to-instance": {
|
||||
"message": "Zurück zur Instanz"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Alle Versionen"
|
||||
},
|
||||
@@ -698,20 +827,188 @@
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Bereits installiert"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-show-tooltip": {
|
||||
"message": "Ziehen, um letzte Instanzen anzuzeigen"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-tooltip": {
|
||||
"message": "Ziehen zur Größenänderung"
|
||||
},
|
||||
"app.restarting": {
|
||||
"message": "Wird neu gestartet..."
|
||||
},
|
||||
"app.settings.app-version": {
|
||||
"message": "Modrinth App {version}"
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.description": {
|
||||
"message": "Umgebungsvariablen, die beim Starten einer Instanz gesetzt werden."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.placeholder": {
|
||||
"message": "Umgebungsvariablen eingeben..."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.title": {
|
||||
"message": "Umgebungsvariablen"
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.description": {
|
||||
"message": "Startet Instanzen im Vollbildmodus durch Aktualisieren ihrer options.txt-Datei."
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.title": {
|
||||
"message": "Vollbild"
|
||||
},
|
||||
"app.settings.default-instance-options.height.description": {
|
||||
"message": "Die Höhe des Spielfensters beim Starten"
|
||||
},
|
||||
"app.settings.default-instance-options.height.placeholder": {
|
||||
"message": "Höhe eingeben..."
|
||||
},
|
||||
"app.settings.default-instance-options.height.title": {
|
||||
"message": "Höhe"
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.description": {
|
||||
"message": "Argumente, die beim Starten einer Instanz an Java übergeben werden."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.placeholder": {
|
||||
"message": "Java-Argumente eingeben..."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.title": {
|
||||
"message": "Java-Argumente"
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.description": {
|
||||
"message": "Maximal verfügbarer Arbeitsspeicher zu jeder Instanz."
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.title": {
|
||||
"message": "Arbeitsspeicherzuweisung"
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.description": {
|
||||
"message": "Wird nach dem Beenden des Spiels ausgeführt."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.placeholder": {
|
||||
"message": "Nach Spielbeendigung auszuführender Befehl eingeben..."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.title": {
|
||||
"message": "Aktion nach Programmende"
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.description": {
|
||||
"message": "Läuft bevor die Instanz startet."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.placeholder": {
|
||||
"message": "Vor Spielstart auszuführenden Befehl eingeben..."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.title": {
|
||||
"message": "Startaktion"
|
||||
},
|
||||
"app.settings.default-instance-options.width.description": {
|
||||
"message": "Die Breite des Spielfensters beim Start."
|
||||
},
|
||||
"app.settings.default-instance-options.width.placeholder": {
|
||||
"message": "Breite eingeben..."
|
||||
},
|
||||
"app.settings.default-instance-options.width.title": {
|
||||
"message": "Breite"
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.description": {
|
||||
"message": "Wrapper-Befehl für den Minecraft-Startprozess."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.placeholder": {
|
||||
"message": "Wrapperbefehl eingeben..."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.title": {
|
||||
"message": "Wrapper-Hook"
|
||||
},
|
||||
"app.settings.developer-mode-button.label": {
|
||||
"message": "Entwicklermodus umschalten"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Entwicklermodus aktiviert."
|
||||
},
|
||||
"app.settings.downloading": {
|
||||
"message": "Lade v{version} herunter"
|
||||
},
|
||||
"app.settings.java-installations.location.title": {
|
||||
"message": "Java {version, number} Installation"
|
||||
},
|
||||
"app.settings.operating-system.macos": {
|
||||
"message": "macOS"
|
||||
},
|
||||
"app.settings.privacy.ads-consent.intro": {
|
||||
"message": "Werbung ermöglicht Modrinth und finanziert die Auszahlungen an die Ersteller. Unsere Partner speichern möglicherweise Cookies in der App oder greifen auf diese zu, um Werbung zu personalisieren und die Leistung zu messen. Du kannst dies unten deaktivieren oder deine Einstellungen verwalten."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.description": {
|
||||
"message": "Zeige Modrinth App als deine aktuelle Aktivität auf Discord. Dies betrifft nicht Rich Presence die von Mods zu Instanzen hinzugefügt wird. Benötigt einen Neustart der App."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.title": {
|
||||
"message": "Discord Rich Presence"
|
||||
},
|
||||
"app.settings.privacy.telemetry.description": {
|
||||
"message": "Modrinth sammelt anonymisierte Analyse- und Nutzungsdaten, um unsere Nutzererfahrung zu verbessern und deine Erfahrung anzupassen. Wenn du diese Option deaktivierst, entscheidest du dich dagegen und deine Daten werden nicht mehr gesammelt."
|
||||
},
|
||||
"app.settings.privacy.telemetry.title": {
|
||||
"message": "Telemetrie"
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.description": {
|
||||
"message": "Zeigt die Aktion \"Details kopieren\" an, während eine Installation in der Warteschlange steht oder ausgeführt wird. Bei fehlgeschlagenen oder abgebrochenen Installationen ist sie immer verfügbar."
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.title": {
|
||||
"message": "Immer Kopierdetails anzeigen"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.description": {
|
||||
"message": "Die App könnte langsamer laden, bis der Cache neu aufgebaut wurde."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.title": {
|
||||
"message": "App-Cache leeren?"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.description": {
|
||||
"message": "Gespeicherte Cache-Daten löschen und sie neu von Modrinth herunterladen. Die App könnte langsamer laden, bis der Cache neu aufgebaut wurde."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.purge": {
|
||||
"message": "Cache leeren"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.title": {
|
||||
"message": "App-Cache"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.description": {
|
||||
"message": "Backups von wichtigen App-Daten werden hier gespeichert, falls du sie später wiederherstellen musst."
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.open-folder": {
|
||||
"message": "Backups Ordner öffnen"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.title": {
|
||||
"message": "App-Daten Backups"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.browse": {
|
||||
"message": "Nach einem App-Verzeichnis suchen"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.description": {
|
||||
"message": "Wo Modrinth App Instanzen und andere Dateien speichert. Änderungen werden nach dem Neustarten der App angewendet."
|
||||
},
|
||||
"app.settings.resource-management.app-directory.select": {
|
||||
"message": "Neues App-Verzeichnis auswählen"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.title": {
|
||||
"message": "App-Verzeichnis"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.description": {
|
||||
"message": "Anzahl der Dateien, die die App auf einmal herunterladen kann. Senke dies, wenn downloads auf deiner Verbindung unzuverlässig sind. Benötigt einen App-Neustart."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.title": {
|
||||
"message": "Maximale gleichzeitige Downloads"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.description": {
|
||||
"message": "Wie viele Dateien die App auf einmal auf die Festplatte schreiben kann. Senke dies, wenn du oft I/O Fehler bekommst. Benötigt einen App-Neustart."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.title": {
|
||||
"message": "Maximale gleichzeitige Schreibvorgänge"
|
||||
},
|
||||
"app.settings.sidebar.label.instances": {
|
||||
"message": "Instanzen"
|
||||
},
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Erscheinungsbild"
|
||||
},
|
||||
"app.settings.tabs.behavior": {
|
||||
"message": "Verhalten"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Standard Instanz-Einstellungen"
|
||||
"message": "Standard-Spieloptionen"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Java Installationen"
|
||||
@@ -725,6 +1022,9 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "Ressourcenmanagement"
|
||||
},
|
||||
"app.sidebar.playing-as": {
|
||||
"message": "Wird gespielt als"
|
||||
},
|
||||
"app.skins.add-button": {
|
||||
"message": "Skin hinzufügen"
|
||||
},
|
||||
@@ -884,6 +1184,21 @@
|
||||
"app.skins.toggle-ears-features-on": {
|
||||
"message": "Aktivieren"
|
||||
},
|
||||
"app.survey.body": {
|
||||
"message": "Könntest du ein paar Fragen über deine Erfahrung mit Modrinth App beantworten?"
|
||||
},
|
||||
"app.survey.footer": {
|
||||
"message": "Das Feedback geht direkt an das Modrinth-Team und wird helfen, zukünftige Updates zu gestalten!"
|
||||
},
|
||||
"app.survey.no-thanks": {
|
||||
"message": "Nein danke"
|
||||
},
|
||||
"app.survey.take-survey": {
|
||||
"message": "An Umfrage teilnehmen"
|
||||
},
|
||||
"app.survey.title": {
|
||||
"message": "Hey, Modrinth Nutzer!"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} wurde heruntergeladen. Lade die App neu um jetzt zu aktualisieren, oder automatisch nach dem schliessen der Modrinth App."
|
||||
},
|
||||
@@ -914,6 +1229,9 @@
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "Version {version} wurde erfolgreich installiert!"
|
||||
},
|
||||
"app.user.project.install-to-instance": {
|
||||
"message": "In Instanz installieren"
|
||||
},
|
||||
"app.world.server-modal.placeholder-address": {
|
||||
"message": "example.modrinth.gg"
|
||||
},
|
||||
@@ -1160,6 +1478,45 @@
|
||||
"instance.server-modal.resource-pack": {
|
||||
"message": "Ressourcenpaket"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.actions": {
|
||||
"message": "Aktionen"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.code": {
|
||||
"message": "Einladungslink"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.description": {
|
||||
"message": "Jeder, der einen dieser Einladungslinks hat, kann beitreten, solange der Link aktiv ist."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.empty": {
|
||||
"message": "Es gibt keine aktiven Einladungen."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.expires": {
|
||||
"message": "Läuft ab"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke": {
|
||||
"message": "Einladung zurückziehen"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke-with-code": {
|
||||
"message": "Einladung {code} zurückziehen"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.title": {
|
||||
"message": "Aktive Einladungen"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.uses": {
|
||||
"message": "Nutzungen"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-body": {
|
||||
"message": "Der Einladungslink <monospace>{code}</monospace> wird sofort aufhören zu funktionieren. Nutzer, die bereits beigetreten sind, bleibt der Zugang gewährt."
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-header": {
|
||||
"message": "Diese Aktion kann nicht rückgängig gemacht werden"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.confirm": {
|
||||
"message": "Einladung zurückziehen"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.header": {
|
||||
"message": "Einladung zurückziehen"
|
||||
},
|
||||
"instance.settings.tabs.general": {
|
||||
"message": "Allgemein"
|
||||
},
|
||||
@@ -1268,6 +1625,27 @@
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Spielstart Hooks"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.description": {
|
||||
"message": "Hooks werden im Arbeitsverzeichnis der Instanz mit den folgenden Variablen ausgeführt:"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-dir.description": {
|
||||
"message": "$INST_DIR: Der absolute Pfad zum Ordner der Instanz"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-id.description": {
|
||||
"message": "$INST_ID: Der Name des Ordners der Instanz"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java-args.description": {
|
||||
"message": "$INST_JAVA_ARGS: Die JVM-Argumente, die dem Spiel zur Verfügung gestellt werden"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java.description": {
|
||||
"message": "$INST_JAVA: Der absolute Pfad zur Java-Binärdatei"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-mc-dir.description": {
|
||||
"message": "$INST_MC_DIR: Ein Alias für $INST_DIR"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-name.description": {
|
||||
"message": "$INST_NAME: Der Name der Instanz"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper": {
|
||||
"message": "Wrapper"
|
||||
},
|
||||
@@ -1361,6 +1739,12 @@
|
||||
"instance.shared-instance.error.title": {
|
||||
"message": "Etwas ist schiefgelaufen"
|
||||
},
|
||||
"instance.shared-instance.network-error.text": {
|
||||
"message": "Verbindung zur Shared-Instances-API nicht möglich"
|
||||
},
|
||||
"instance.shared-instance.network-error.title": {
|
||||
"message": "Netzwerkfehler"
|
||||
},
|
||||
"instance.shared-instance.owner-tooltip": {
|
||||
"message": "Der Inhalt dieser Instanz wird mit anderen Benutzern geteilt."
|
||||
},
|
||||
@@ -1496,9 +1880,6 @@
|
||||
"modal.modrinth-account-required.browser-description": {
|
||||
"message": "Ein neuer Tab zum Anmelden wurde geöffnet. Schließe die Anmeldung dort ab und kehren anschließend zur App zurück."
|
||||
},
|
||||
"modal.modrinth-account-required.cancel-button": {
|
||||
"message": "Abbrechen"
|
||||
},
|
||||
"modal.modrinth-account-required.continue-in-browser-heading": {
|
||||
"message": "Im Browser fortfahren"
|
||||
},
|
||||
@@ -1552,5 +1933,11 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader wird vom Server bereitgestellt"
|
||||
},
|
||||
"settings.sidebar.label.account": {
|
||||
"message": "Konto"
|
||||
},
|
||||
"settings.sidebar.label.display": {
|
||||
"message": "Anzeige"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,19 +144,19 @@
|
||||
"message": "Deine Privatsphäre und wie Werbung Modrinth unterstützt"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Aktiviert erweiterte Rendering-Funktionen wie Unschärfe-Effekte, welche ohne Hardware-beschleunigtes Rendering zu Leistungsproblemen führen können."
|
||||
"message": "Visuelle Effekte wie Hintergrundunschärfe aktivieren. Ohne Hardwarebeschleunigung kann dies die Leistung beeinträchtigen."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Erweitertes Rendering"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Wähle dein bevorzugtes Farbschema für die Modrinth App."
|
||||
"message": "Wähle das Farbschema der Modrinth App aus."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Farbschema"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Ändere die Seite, die beim Öffnen des Launchers angezeigt wird."
|
||||
"message": "Wähle die Seite, die beim Öffnen der Modrinth App erscheint."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Start"
|
||||
@@ -168,49 +168,49 @@
|
||||
"message": "Standard-Startseite"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Deaktiviert das Namensschild über deinem Spieler auf der Skin-Seite."
|
||||
"message": "Verbirgt deinen Benutzernamen über der Spielervorschau auf der Skin-Auswahlseite."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Namensschild ausblenden"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Enthält zuletzt gespielte Welten im Abschnitt „Direkt weiterspielen“ auf der Startseite."
|
||||
"message": "Zeigt deine zuletzt gespielten Welten in der Sektion „Direkt in Welten weiterspielen“ auf der Startseite an."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Direkt in Welten weiterspielen"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Den Launcher minimieren, wenn ein Minecraft-Prozess gestartet wird."
|
||||
"message": "Minimiere die Modrinth App, wenn Minecraft startet."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Launcher minimieren"
|
||||
"message": "App minimieren"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Fensterrahmen des Systems verwenden (Neustart der App erforderlich)."
|
||||
"message": "Nutzt die Titelleiste und Fenstersteuerung deines Betriebssystems. Erfordert einen App-Neustart."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Native Dekorationen"
|
||||
"message": "System-Fensterrahmen"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Zeigt an, wie viel Zeit du damit verbracht hast, eine Instanz zu spielen."
|
||||
"message": "Zeigt, wie lange du jede einzelne Instanz gespielt hast."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Spielzeit anzeigen"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Bestätigungen mit geringem Risiko, wie z. B. die Installation doppelter Modpacks, das Löschen normaler Inhalte, Massenaktualisierungen, das Aufheben von Verknüpfungen zu Modpacks und Reparaturaufrufe, werden automatisch übersprungen. Gefährliche Warnungen werden weiterhin angezeigt."
|
||||
"message": "Bestätigungen für risikoarme Aktionen überspringen (z. B. doppelte Installationen, normales Löschen, Massen-Updates, Entkoppeln und Reparieren). Warnungen für gefährliche Aktionen werden weiterhin angezeigt."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Unwichtige Warnungen überspringen"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Ermöglicht das Umschalten der Seitenleiste."
|
||||
"message": "Blendet die rechte Seitenleiste standardmäßig aus und fügt einen Button zum Ein- oder Ausblenden hinzu."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Seitenleiste umschalten"
|
||||
"message": "Rechte Seitenleiste ausblenden"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Falls du versuchst, eine Modrinth-Pack-Datei (.mrpack) zu installieren, die nicht auf Modrinth gehostet wird, werden die Risiken vor der Installation bekannt gegeben."
|
||||
"message": "Zeige eine Sicherheitswarnung an, bevor ein Modrinth-Paket (.mrpack) installiert wird, welches nicht auf Modrinth gehostet wird."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "Warne mich, bevor unbekannte Modpacks installiert werden"
|
||||
@@ -221,6 +221,15 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Authentifizierungsserver sind nicht erreichbar"
|
||||
},
|
||||
"app.behavior-settings.confirmations.title": {
|
||||
"message": "Bestätigungen"
|
||||
},
|
||||
"app.behavior-settings.content.title": {
|
||||
"message": "Startseite & Inhalte"
|
||||
},
|
||||
"app.behavior-settings.startup-and-navigation.title": {
|
||||
"message": "Start & Navigation"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "Server zur Instanz hinzufügen"
|
||||
},
|
||||
@@ -242,12 +251,18 @@
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "Zurück zur Instanz"
|
||||
},
|
||||
"app.browse.discover-project-type": {
|
||||
"message": "{projectType} entdecken"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Server entdecken"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Bereits hinzugefügte Server ausblenden"
|
||||
},
|
||||
"app.browse.hide-installed-modpacks": {
|
||||
"message": "Bereits installiert ausblenden"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpacks"
|
||||
},
|
||||
@@ -362,9 +377,18 @@
|
||||
"app.instance.admonitions.shared-instance.review-header": {
|
||||
"message": "Änderungen überprüfen"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-update-button": {
|
||||
"message": "Update überprüfen"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.reviewing-button": {
|
||||
"message": "Wird überprüft..."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-body": {
|
||||
"message": "Ein Update ist erforderlich, um {name} zu spielen. Bitte aktualisiere auf die neueste Version, um das Spiel zu starten."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-header": {
|
||||
"message": "Ein Update ist verfügbar"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Alle Daten deiner Instanz werden permanent gelöscht, einschließlich deiner Welten, Konfigurationen und allen installierten Inhalten."
|
||||
},
|
||||
@@ -431,6 +455,9 @@
|
||||
"app.instance.share.invite-modal.heading": {
|
||||
"message": "{name} teilen"
|
||||
},
|
||||
"app.instance.share.invite-modal.user-limit-reached": {
|
||||
"message": "Diese Instanz hat das Nutzerlimit von {limit} erreicht."
|
||||
},
|
||||
"app.instance.share.locked.empty-description-prefix": {
|
||||
"message": "Du musst dich als"
|
||||
},
|
||||
@@ -449,6 +476,12 @@
|
||||
"app.instance.share.locked.wrong-account-heading": {
|
||||
"message": "Falsches Konto"
|
||||
},
|
||||
"app.instance.share.members.empty": {
|
||||
"message": "Es sind noch keine Benutzer beigetreten"
|
||||
},
|
||||
"app.instance.share.members.no-filter-results": {
|
||||
"message": "Keine Benutzer passen zu deinen Filtern."
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-access": {
|
||||
"message": "Diese Person wird für diese geteilte Instanz keine Updates mehr erhalten"
|
||||
},
|
||||
@@ -479,6 +512,12 @@
|
||||
"app.instance.share.sign-in.button": {
|
||||
"message": "Anmelden"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.description": {
|
||||
"message": "Der Dienst für geteilte Instanzen ist derzeit nicht erreichbar; bitte versuche es später erneut"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.heading": {
|
||||
"message": "Verbindung nicht möglich"
|
||||
},
|
||||
"app.instance.share.unlink.body": {
|
||||
"message": "Du musst die Verknüpfung zu diesem Modpack trennen, um deine Instanz zu teilen"
|
||||
},
|
||||
@@ -551,6 +590,9 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "Keine Server oder Welten hinzugefügt"
|
||||
},
|
||||
"app.instance.worlds.refreshing": {
|
||||
"message": "Wird aktualisiert..."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "Server entfernen"
|
||||
},
|
||||
@@ -566,12 +608,60 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Durchsuche {count} Welten..."
|
||||
},
|
||||
"app.java-detection.cancel": {
|
||||
"message": "Abbrechen"
|
||||
},
|
||||
"app.java-detection.columns.actions": {
|
||||
"message": "Aktionen"
|
||||
},
|
||||
"app.java-detection.columns.path": {
|
||||
"message": "Pfad"
|
||||
},
|
||||
"app.java-detection.columns.version": {
|
||||
"message": "Version"
|
||||
},
|
||||
"app.java-detection.no-installations-found": {
|
||||
"message": "Keine Java Installationen gefunden."
|
||||
},
|
||||
"app.java-detection.select": {
|
||||
"message": "Auswählen"
|
||||
},
|
||||
"app.java-detection.selected": {
|
||||
"message": "Ausgewählt"
|
||||
},
|
||||
"app.java-detection.title": {
|
||||
"message": "Java-Installation auswählen"
|
||||
},
|
||||
"app.java-selector.already-installed": {
|
||||
"message": "Bereits installiert"
|
||||
},
|
||||
"app.java-selector.browse": {
|
||||
"message": "Durchsuchen"
|
||||
},
|
||||
"app.java-selector.detect": {
|
||||
"message": "Erkennen"
|
||||
},
|
||||
"app.java-selector.install-recommended": {
|
||||
"message": "Empfohlenes installieren"
|
||||
},
|
||||
"app.java-selector.installing": {
|
||||
"message": "Installiere..."
|
||||
},
|
||||
"app.java-selector.path.placeholder": {
|
||||
"message": "/path/to/java"
|
||||
},
|
||||
"app.java-selector.test-installation": {
|
||||
"message": "Java-Installation testen"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context": {
|
||||
"message": "Zusätzlicher Kontext"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context-placeholder": {
|
||||
"message": "Füge gegebenenfalls relevante Links und Bilder hinzu"
|
||||
},
|
||||
"app.modal.install-to-play.block-user": {
|
||||
"message": "Benutzer blockieren"
|
||||
},
|
||||
"app.modal.install-to-play.content-you-are-reporting": {
|
||||
"message": "Die Instanz, die du meldest"
|
||||
},
|
||||
@@ -593,6 +683,9 @@
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Diese Einladung wurde von einem anderen Modrinth-Nutzer erstellt, nicht von Modrinth. Nimm nur Einladungen von Personen an, denen du vertraust."
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning-with-creator": {
|
||||
"message": "Diese Einladung wurde von <creator>{username}</creator> erstellt, nicht von Modrinth. Akzeptierte nur Einladungen von Leuten, denen du vertraust."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# Mod} other {# Mods}}"
|
||||
},
|
||||
@@ -650,6 +743,9 @@
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Nicht erkannte Dateien"
|
||||
},
|
||||
"app.modal.install-to-play.user-blocked": {
|
||||
"message": "Benutzer blockiert"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Inhalte ansehen"
|
||||
},
|
||||
@@ -677,6 +773,36 @@
|
||||
"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.nav.create-new-instance": {
|
||||
"message": "Neue Instanz erstellen"
|
||||
},
|
||||
"app.nav.home": {
|
||||
"message": "Startseite"
|
||||
},
|
||||
"app.nav.library": {
|
||||
"message": "Bibliothek"
|
||||
},
|
||||
"app.nav.modrinth-account": {
|
||||
"message": "Modrinth-Konto"
|
||||
},
|
||||
"app.nav.modrinth-hosting": {
|
||||
"message": "Modrinth Hosting"
|
||||
},
|
||||
"app.nav.sign-in-to-modrinth-account": {
|
||||
"message": "Bei einem Modrinth-Konto anmelden"
|
||||
},
|
||||
"app.nav.signed-in-as": {
|
||||
"message": "Angemeldet als <user>{username}</user>"
|
||||
},
|
||||
"app.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Auf Modrinth+ upgraden"
|
||||
},
|
||||
"app.news.title": {
|
||||
"message": "Neuigkeiten"
|
||||
},
|
||||
"app.news.view-all": {
|
||||
"message": "Alle Neuigkeiten anzeigen"
|
||||
},
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Dieses Projekt ist bereits installiert"
|
||||
},
|
||||
@@ -686,6 +812,9 @@
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Zurück zum Entdecken"
|
||||
},
|
||||
"app.project.install-context.back-to-instance": {
|
||||
"message": "Zurück zur Instanz"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Alle Versionen"
|
||||
},
|
||||
@@ -698,20 +827,188 @@
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Bereits installiert"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-show-tooltip": {
|
||||
"message": "Ziehen, um letzte Instanzen anzuzeigen"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-tooltip": {
|
||||
"message": "Ziehen zur Größenänderung"
|
||||
},
|
||||
"app.restarting": {
|
||||
"message": "Wird neu gestartet..."
|
||||
},
|
||||
"app.settings.app-version": {
|
||||
"message": "Modrinth App {version}"
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.description": {
|
||||
"message": "Umgebungsvariablen, die beim Starten einer Instanz gesetzt werden."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.placeholder": {
|
||||
"message": "Umgebungsvariablen eingeben..."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.title": {
|
||||
"message": "Umgebungsvariablen"
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.description": {
|
||||
"message": "Startet Instanzen im Vollbildmodus durch Aktualisieren ihrer options.txt-Datei."
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.title": {
|
||||
"message": "Vollbild"
|
||||
},
|
||||
"app.settings.default-instance-options.height.description": {
|
||||
"message": "Die Höhe des Spielfensters beim Starten"
|
||||
},
|
||||
"app.settings.default-instance-options.height.placeholder": {
|
||||
"message": "Höhe eingeben..."
|
||||
},
|
||||
"app.settings.default-instance-options.height.title": {
|
||||
"message": "Höhe"
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.description": {
|
||||
"message": "Argumente, die beim Starten einer Instanz an Java übergeben werden."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.placeholder": {
|
||||
"message": "Java-Argumente eingeben..."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.title": {
|
||||
"message": "Java-Argumente"
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.description": {
|
||||
"message": "Maximal verfügbarer Arbeitsspeicher zu jeder Instanz."
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.title": {
|
||||
"message": "Arbeitsspeicherzuweisung"
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.description": {
|
||||
"message": "Wird nach dem Beenden des Spiels ausgeführt."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.placeholder": {
|
||||
"message": "Nach Spielbeendigung auszuführender Befehl eingeben..."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.title": {
|
||||
"message": "Aktion nach Programmende"
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.description": {
|
||||
"message": "Läuft bevor die Instanz startet."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.placeholder": {
|
||||
"message": "Vor Spielstart auszuführenden Befehl eingeben..."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.title": {
|
||||
"message": "Startaktion"
|
||||
},
|
||||
"app.settings.default-instance-options.width.description": {
|
||||
"message": "Die Breite des Spielfensters beim Start."
|
||||
},
|
||||
"app.settings.default-instance-options.width.placeholder": {
|
||||
"message": "Breite eingeben..."
|
||||
},
|
||||
"app.settings.default-instance-options.width.title": {
|
||||
"message": "Breite"
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.description": {
|
||||
"message": "Wrapper-Befehl für den Minecraft-Startprozess."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.placeholder": {
|
||||
"message": "Wrapperbefehl eingeben..."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.title": {
|
||||
"message": "Wrapper-Hook"
|
||||
},
|
||||
"app.settings.developer-mode-button.label": {
|
||||
"message": "Entwicklermodus umschalten"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Entwicklermodus aktiviert."
|
||||
},
|
||||
"app.settings.downloading": {
|
||||
"message": "Lade v{version} herunter"
|
||||
},
|
||||
"app.settings.java-installations.location.title": {
|
||||
"message": "Java {version, number} Installation"
|
||||
},
|
||||
"app.settings.operating-system.macos": {
|
||||
"message": "macOS"
|
||||
},
|
||||
"app.settings.privacy.ads-consent.intro": {
|
||||
"message": "Werbung ermöglicht Modrinth und finanziert die Auszahlungen an die Ersteller. Unsere Partner speichern möglicherweise Cookies in der App oder greifen auf diese zu, um Werbung zu personalisieren und die Leistung zu messen. Du kannst dies unten deaktivieren oder deine Einstellungen verwalten."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.description": {
|
||||
"message": "Zeige Modrinth App als deine aktuelle Aktivität auf Discord. Dies betrifft nicht Rich Presence die von Mods zu Instanzen hinzugefügt wird. Benötigt einen Neustart der App."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.title": {
|
||||
"message": "Discord Rich Presence"
|
||||
},
|
||||
"app.settings.privacy.telemetry.description": {
|
||||
"message": "Modrinth sammelt anonymisierte Analyse- und Nutzungsdaten, um unsere Nutzererfahrung zu verbessern und deine Erfahrung anzupassen. Wenn du diese Option deaktivierst, entscheidest du dich dagegen und deine Daten werden nicht mehr gesammelt."
|
||||
},
|
||||
"app.settings.privacy.telemetry.title": {
|
||||
"message": "Telemetrie"
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.description": {
|
||||
"message": "Zeigt die Aktion \"Details kopieren\" an, während eine Installation in der Warteschlange steht oder ausgeführt wird. Bei fehlgeschlagenen oder abgebrochenen Installationen ist sie immer verfügbar."
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.title": {
|
||||
"message": "Immer Kopierdetails anzeigen"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.description": {
|
||||
"message": "Die App könnte langsamer laden, bis der Cache neu aufgebaut wurde."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.title": {
|
||||
"message": "App-Cache leeren?"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.description": {
|
||||
"message": "Gespeicherte Cache-Daten löschen und sie neu von Modrinth herunterladen. Die App könnte langsamer laden, bis der Cache neu aufgebaut wurde."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.purge": {
|
||||
"message": "Cache leeren"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.title": {
|
||||
"message": "App-Cache"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.description": {
|
||||
"message": "Backups von wichtigen App-Daten werden hier gespeichert, falls du sie später wiederherstellen musst."
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.open-folder": {
|
||||
"message": "Backups Ordner öffnen"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.title": {
|
||||
"message": "App-Daten Backups"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.browse": {
|
||||
"message": "Nach einem App-Verzeichnis suchen"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.description": {
|
||||
"message": "Wo Modrinth App Instanzen und andere Dateien speichert. Änderungen werden nach dem Neustarten der App angewendet."
|
||||
},
|
||||
"app.settings.resource-management.app-directory.select": {
|
||||
"message": "Neues App-Verzeichnis auswählen"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.title": {
|
||||
"message": "App-Verzeichnis"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.description": {
|
||||
"message": "Anzahl der Dateien, die die App auf einmal herunterladen kann. Senke dies, wenn downloads auf deiner Verbindung unzuverlässig sind. Benötigt einen App-Neustart."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.title": {
|
||||
"message": "Maximale gleichzeitige Downloads"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.description": {
|
||||
"message": "Wie viele Dateien die App auf einmal auf die Festplatte schreiben kann. Senke dies, wenn du oft I/O Fehler bekommst. Benötigt einen App-Neustart."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.title": {
|
||||
"message": "Maximale gleichzeitige Schreibvorgänge"
|
||||
},
|
||||
"app.settings.sidebar.label.instances": {
|
||||
"message": "Instanzen"
|
||||
},
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Erscheinungsbild"
|
||||
},
|
||||
"app.settings.tabs.behavior": {
|
||||
"message": "Verhalten"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Standard Instanz-Einstellungen"
|
||||
"message": "Standard-Spieloptionen"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Java-Installationen"
|
||||
@@ -725,6 +1022,9 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "Ressourcenmanagement"
|
||||
},
|
||||
"app.sidebar.playing-as": {
|
||||
"message": "Wird gespielt als"
|
||||
},
|
||||
"app.skins.add-button": {
|
||||
"message": "Skin hinzufügen"
|
||||
},
|
||||
@@ -884,6 +1184,21 @@
|
||||
"app.skins.toggle-ears-features-on": {
|
||||
"message": "Aktivieren"
|
||||
},
|
||||
"app.survey.body": {
|
||||
"message": "Könntest du ein paar Fragen über deine Erfahrung mit Modrinth App beantworten?"
|
||||
},
|
||||
"app.survey.footer": {
|
||||
"message": "Das Feedback geht direkt an das Modrinth-Team und wird helfen, zukünftige Updates zu gestalten!"
|
||||
},
|
||||
"app.survey.no-thanks": {
|
||||
"message": "Nein danke"
|
||||
},
|
||||
"app.survey.take-survey": {
|
||||
"message": "An Umfrage teilnehmen"
|
||||
},
|
||||
"app.survey.title": {
|
||||
"message": "Hey, Modrinth Nutzer!"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} wurde heruntergeladen. Jetzt neu laden, um sofort zu aktualisieren, oder beim Schließen der Modrinth-App automatisch aktualisieren."
|
||||
},
|
||||
@@ -914,6 +1229,9 @@
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "Version {version} wurde erfolgreich installiert!"
|
||||
},
|
||||
"app.user.project.install-to-instance": {
|
||||
"message": "In Instanz installieren"
|
||||
},
|
||||
"app.world.server-modal.placeholder-address": {
|
||||
"message": "example.modrinth.gg"
|
||||
},
|
||||
@@ -1160,6 +1478,45 @@
|
||||
"instance.server-modal.resource-pack": {
|
||||
"message": "Ressourcenpaket"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.actions": {
|
||||
"message": "Aktionen"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.code": {
|
||||
"message": "Einladungslink"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.description": {
|
||||
"message": "Jeder, der einen dieser Einladungslinks hat, kann beitreten, solange der Link aktiv ist."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.empty": {
|
||||
"message": "Es gibt keine aktiven Einladungen."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.expires": {
|
||||
"message": "Läuft ab"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke": {
|
||||
"message": "Einladung zurückziehen"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke-with-code": {
|
||||
"message": "Einladung {code} zurückziehen"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.title": {
|
||||
"message": "Aktive Einladungen"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.uses": {
|
||||
"message": "Nutzungen"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-body": {
|
||||
"message": "Der Einladungslink <monospace>{code}</monospace> wird sofort aufhören zu funktionieren. Nutzer, die bereits beigetreten sind, bleibt der Zugang gewährt."
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-header": {
|
||||
"message": "Diese Aktion kann nicht rückgängig gemacht werden"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.confirm": {
|
||||
"message": "Einladung zurückziehen"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.header": {
|
||||
"message": "Einladung zurückziehen"
|
||||
},
|
||||
"instance.settings.tabs.general": {
|
||||
"message": "Allgemein"
|
||||
},
|
||||
@@ -1268,6 +1625,27 @@
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Start-Hooks"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.description": {
|
||||
"message": "Hooks werden im Arbeitsverzeichnis der Instanz mit den folgenden Variablen ausgeführt:"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-dir.description": {
|
||||
"message": "$INST_DIR: Der absolute Pfad zum Ordner der Instanz"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-id.description": {
|
||||
"message": "$INST_ID: Der Name des Ordners der Instanz"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java-args.description": {
|
||||
"message": "$INST_JAVA_ARGS: Die JVM-Argumente, die dem Spiel zur Verfügung gestellt werden"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java.description": {
|
||||
"message": "$INST_JAVA: Der absolute Pfad zur Java-Binärdatei"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-mc-dir.description": {
|
||||
"message": "$INST_MC_DIR: Ein Alias für $INST_DIR"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-name.description": {
|
||||
"message": "$INST_NAME: Der Name der Instanz"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper": {
|
||||
"message": "Wrapper"
|
||||
},
|
||||
@@ -1361,6 +1739,12 @@
|
||||
"instance.shared-instance.error.title": {
|
||||
"message": "Etwas ist schiefgelaufen"
|
||||
},
|
||||
"instance.shared-instance.network-error.text": {
|
||||
"message": "Verbindung zur Shared-Instances-API nicht möglich"
|
||||
},
|
||||
"instance.shared-instance.network-error.title": {
|
||||
"message": "Netzwerkfehler"
|
||||
},
|
||||
"instance.shared-instance.owner-tooltip": {
|
||||
"message": "Der Inhalt dieser Instanz wird mit anderen Benutzern geteilt."
|
||||
},
|
||||
@@ -1496,9 +1880,6 @@
|
||||
"modal.modrinth-account-required.browser-description": {
|
||||
"message": "Ein neuer Tab zum Anmelden wurde geöffnet. Schließe die Anmeldung dort ab und kehren anschließend zur App zurück."
|
||||
},
|
||||
"modal.modrinth-account-required.cancel-button": {
|
||||
"message": "Abbrechen"
|
||||
},
|
||||
"modal.modrinth-account-required.continue-in-browser-heading": {
|
||||
"message": "Im Browser fortfahren"
|
||||
},
|
||||
@@ -1552,5 +1933,11 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader vom Server vorgegeben"
|
||||
},
|
||||
"settings.sidebar.label.account": {
|
||||
"message": "Konto"
|
||||
},
|
||||
"settings.sidebar.label.display": {
|
||||
"message": "Anzeige"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
"app.action-bar.downloads": {
|
||||
"message": "Downloads"
|
||||
},
|
||||
"app.action-bar.hide-downloads": {
|
||||
"message": "Hide active downloads"
|
||||
},
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Hide more running instances"
|
||||
},
|
||||
@@ -110,6 +113,9 @@
|
||||
"app.action-bar.reload-to-update": {
|
||||
"message": "Reload to update"
|
||||
},
|
||||
"app.action-bar.show-downloads": {
|
||||
"message": "Show active downloads"
|
||||
},
|
||||
"app.action-bar.show-more-running-instances": {
|
||||
"message": "Show more running instances"
|
||||
},
|
||||
@@ -260,6 +266,9 @@
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Hide servers already added"
|
||||
},
|
||||
"app.browse.hide-installed-modpacks": {
|
||||
"message": "Hide already installed"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpacks"
|
||||
},
|
||||
@@ -587,6 +596,9 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "No servers or worlds added"
|
||||
},
|
||||
"app.instance.worlds.refreshing": {
|
||||
"message": "Refreshing..."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "Remove server"
|
||||
},
|
||||
@@ -717,7 +729,7 @@
|
||||
"message": "For support requests, contact our <support-link>support team</support-link>. For bug reports, open a <github-link>GitHub issue</github-link>."
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "A file is only reviewed if it’s published to Modrinth, regardless of its file format (including .mrpack)."
|
||||
"message": "Files that aren't published to Modrinth aren't reviewed."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Shared instance"
|
||||
@@ -1223,6 +1235,9 @@
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "Version {version} was successfully installed!"
|
||||
},
|
||||
"app.user.project.install-to-instance": {
|
||||
"message": "Install to instance"
|
||||
},
|
||||
"app.world.server-modal.placeholder-address": {
|
||||
"message": "example.modrinth.gg"
|
||||
},
|
||||
@@ -1616,6 +1631,27 @@
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Game launch hooks"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.description": {
|
||||
"message": "Hooks run in the working directory of the instance, with the following variables:"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-dir.description": {
|
||||
"message": "$INST_DIR: The absolute path to the instance's folder"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-id.description": {
|
||||
"message": "$INST_ID: The name of the instance's folder"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java-args.description": {
|
||||
"message": "$INST_JAVA_ARGS: The JVM Arguments provided to the game"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java.description": {
|
||||
"message": "$INST_JAVA: The absolute path to the java binary"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-mc-dir.description": {
|
||||
"message": "$INST_MC_DIR: An alias for $INST_DIR"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-name.description": {
|
||||
"message": "$INST_NAME: The name of the instance"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper": {
|
||||
"message": "Wrapper"
|
||||
},
|
||||
@@ -1850,9 +1886,6 @@
|
||||
"modal.modrinth-account-required.browser-description": {
|
||||
"message": "A new tab opened to sign in. Complete the sign in there, then return to the app."
|
||||
},
|
||||
"modal.modrinth-account-required.cancel-button": {
|
||||
"message": "Cancel"
|
||||
},
|
||||
"modal.modrinth-account-required.continue-in-browser-heading": {
|
||||
"message": "Continue in your browser"
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -11,6 +11,12 @@
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Ocultar más instancias en ejecución"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Copiado"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Copiar detalles"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Descartar"
|
||||
},
|
||||
@@ -20,6 +26,36 @@
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Reintentar"
|
||||
},
|
||||
"app.action-bar.install.summary.app-closing": {
|
||||
"message": "Cancelado por cierre de la aplicación"
|
||||
},
|
||||
"app.action-bar.install.summary.bad-modpack-file": {
|
||||
"message": "No se pudo leer el modpack"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Cancelado"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "No se pudieron descargar los archivos"
|
||||
},
|
||||
"app.action-bar.install.summary.corrupt-download": {
|
||||
"message": "El archivo descargado está corrupto"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "No se pudieron guardar los archivos"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "La descarga no pudo terminar"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "La instancia no se pudo encontrar"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "La ruta de archivo no es válida"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-modpack": {
|
||||
"message": "Los datos del modpack no son válidos"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Instancia desconocida"
|
||||
},
|
||||
@@ -59,21 +95,12 @@
|
||||
"app.action-bar.view-logs": {
|
||||
"message": "Ver registros"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Habilita el renderizado avanzado, como los efectos de desenfoque, que pueden causar problemas de rendimiento sin renderizado acelerado por hardware."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Renderizado avanzado"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Selecciona tu tema de color preferido para la Modrinth App."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Tema de color"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Cambia la página en la que el launcher inicia."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Inicio"
|
||||
},
|
||||
@@ -83,51 +110,18 @@
|
||||
"app.appearance-settings.default-landing-page.title": {
|
||||
"message": "Página de inicio predeterminada"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Desactiva la etiqueta arriba de tu personaje en la página de skins."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Ocultar etiqueta de nombre"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Incluye los mundos recientes en la sección \"Volver a jugar\" de la página de inicio."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Volver a jugar en tus mundos"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Minimiza el lanzador cuando se inicia un proceso de Minecraft."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Minimizar lanzador"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Usa el marco de ventana del sistema (requiere reiniciar la aplicación)."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Decoraciones nativas"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Muestra cuánto tiempo has estado jugando en una instancia."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Mostrar tiempo de juego"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Automáticamente omite confirmaciones de bajo riesgo como modpacks duplicados, eliminación de contenido normal, actualizaciones masivas, desvinculando modpacks, y mensajes de reparación. Advertencias importantes seguirán siendo mostradas."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Omitir advertencias no esenciales"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Activa la posibilidad de alternar la barra lateral."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Alternar barra lateral"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Si intentas instalar un archivo de paquete de Modrinth (.mrpack) que no esté alojado en Modrinth, debes comprender los riesgos que esto conlleva antes de instalarlo."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "Adviérteme antes de instalarme modpacks desconocidos"
|
||||
},
|
||||
@@ -183,7 +177,7 @@
|
||||
"message": "Exportar modpack"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Nombre del modpack"
|
||||
"message": "Nombre del Conjunto de modificadores"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Nombre del modpack"
|
||||
@@ -296,9 +290,6 @@
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Apariencia"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Opciones predeterminadas de la instancia"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Instalaciones de Java"
|
||||
},
|
||||
|
||||
@@ -71,21 +71,12 @@
|
||||
"app.action-bar.view-logs": {
|
||||
"message": "Katso lokeja"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Mahdollistaa edistyneen renderöinnin, kuten sumennus efektit, jotka voivat aiheuttaa suorituskykyongelmia ilman laitteistokiihdytettyä renderöintiä."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Edistynyt renderointi"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Valitse haluamasi väriteema Modrinth Appille."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Väriteema"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Muuta sivua mille laukaisin avautuu."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Koti"
|
||||
},
|
||||
@@ -95,51 +86,18 @@
|
||||
"app.appearance-settings.default-landing-page.title": {
|
||||
"message": "Oletus laskeutumissivu"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Kytkee pois päältä nimikyltin pelaajasi päällä skinit sivulla."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Piilota nimikyltti"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Sisällyttää viimeaikaiset maailmat \"Hyppää takaisin sisään\" osiossa Koti sivulla."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Hyppää takaisin sisään maailmoihin"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Pienennä laukaisin kun Minecraft prosessi käynnistyy."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Piilota käynnistysohjelma"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Käytä järjestelmän ikkuna kehystä (Vaatii sovelluksen uudelleen käynnistämisen)."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Natiivit koristukset"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Näyttää, kuinka paljon aikaa olet käyttänyt instanssin pelaamiseen."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Näyttää peliaika"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Ohittaa automaattisesti vähäriskiset vahvistukset, kuten modpackien kaksoisasennukset, tavallisen sisällön poistamisen, massapäivitykset, modpackien linkityksen poistamisen ja korjauskehotteet. Vaaralliset varoitukset näytetään silti."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Ohita ei olennaiset varoitukset"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Laittaa päälle mahdollisuuden kytkeä sivupalkkia."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Kytke sivupalkki"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Jos yrität asentaa Modrinth-pakettitiedoston (.mrpack), jota ei ole isännöity Modrinthissä, varmistamme, että ymmärrät riskit ennen asennusta."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "Varoita minua ennen tuntemattomien modipakettien asentamista"
|
||||
},
|
||||
@@ -401,9 +359,6 @@
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Ulkonäkö"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Oletusinstanssin asetukset"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Java asennukset"
|
||||
},
|
||||
|
||||
@@ -47,21 +47,12 @@
|
||||
"app.action-bar.view-logs": {
|
||||
"message": "Tignan ang logs"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Pagpapagana ng masalimuot na pagrerender katulad ng paglalabo na maaaring magdudulot ng mga isyu sa performance kapag walang hardware-acceleration."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Masalimuot na pagrerender"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Piliin ang iyong mas gustong kulay para sa Modrinth app."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Tema ng kulay"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Pagpapalit ng pahina na bubuksan ng launcher."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Tahanan"
|
||||
},
|
||||
@@ -71,42 +62,12 @@
|
||||
"app.appearance-settings.default-landing-page.title": {
|
||||
"message": "Panimulang pahina ng paglapag"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Pagtatago ng nametag na nasa itaas ng iyong manlalaro sa loob ng pahina ng mga skin."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Itago ang nametag"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Pagsasali ng mga kamakailang mundo sa seksiyong \"Jump back in\" sa pahina ng Tahanan."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Bumalik sa mga mundo"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Liitan ang launcher kung nag-start ang isang proseso ng Minecraft."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Liitin ang launcher"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Gamitin ang system window frame (kailangan i-restart ang app)."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Native decorations"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Magpapakita ang katagal ng iyong paglalaro sa isang instansiya."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Pagpapagana na mata-toggle ang sidebar."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "I-toggle ang sidebar"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Kung susubukan mong mag-install ng Modrinth Pack file (.mrpack) na hindi naka-host sa Modrinth, titiyakin namin na nakaaalam ka sa mga panganib bago ito ma-install."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "Pakipaalala bago ko ma-install ang mga di-kilalang modpack"
|
||||
},
|
||||
@@ -269,9 +230,6 @@
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Itsura"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Mga pagpipilian sa default na instansiya"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Mga instalasyon ng Java"
|
||||
},
|
||||
|
||||
@@ -144,19 +144,19 @@
|
||||
"message": "Votre vie privée et comment les publicités soutiennent Modrinth"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Permet un rendu avancé tel que des effets de flou qui peuvent causer des problèmes de performance sans rendu accéléré par le matériel."
|
||||
"message": "Activer les effets visuels tel que le flou d'arrière-plan. Ceci peut réduire les performances sans accélération matérielle."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Rendu avancé"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Sélectionnez votre couleur préférée pour le thème de Modrinth App."
|
||||
"message": "Choisir la couleur de thème utilisée par Modrinth App."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Couleur du thème"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Modifier la page sur laquelle le launcher s'ouvre."
|
||||
"message": "Choisir la page affichée quand Modrinth App s'ouvre."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Accueil"
|
||||
@@ -168,49 +168,49 @@
|
||||
"message": "Page d'ouverture"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Désactive le nom au-dessus du joueur sur la page skins."
|
||||
"message": "Cache votre nom d'utilisateur au-dessus de la prévisualisation du joueur sur la page de sélection de Skins."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Cacher le pseudo"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Inclut les mondes récents dans la section « Partie rapide » sur la page d'accueil."
|
||||
"message": "Affiche les mondes récemment joués dans la section \"Sautez à nouveau dans\" de la page principale."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Mondes sur partie rapide"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Minimiser le launcher quand a processus Minecraft démarre."
|
||||
"message": "Minimiser Modrinth App quand Minecraft se lance."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Minimiser le lanceur"
|
||||
"message": "Minimiser l'application"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Utiliser le cadre fenêtre du système (redémarrage de l'application requis)."
|
||||
"message": "Utilise la barre de titre et les contrôles de fenêtre de votre système d'exploitation. Nécessite le redémarrage de l'application."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Décorations natives"
|
||||
"message": "Cadre de fenêtre système"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Affiche combien de temps vous avez passé sur une instance."
|
||||
"message": "Montre combien de temps vous avez joué à chaque instance."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Afficher le temps de jeu"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Ignore automatiquement les confirmations à faible risque, comme l'installation de modpacks en double, la suppression de contenu standard, les mises à jour groupées, la dissociation des modpacks et les demandes de réparation. Les avertissements concernant les actions dangereuses continueront d'être affichés."
|
||||
"message": "Passe les confirmations pour des actions moins risquées comme dupliquer des installations, suppression de contenu normal, grosses mises à jour, rupture de liens et réparations. Les avertissements pour les actions dangereuses seront toujours affichés."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Cacher les alertes non essentielles"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Permet d'ouvrir ou de fermer la barre latérale."
|
||||
"message": "Cache la barre à droite par défaut et ajouter un bouton pour la montrer ou cacher."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Tiroir latéral"
|
||||
"message": "Cache la barre latérale droite"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Si vous essayez d'installer un fichier Modrinth Pack (.mrpack) qui n'est pas hébergé sur Modrinth, nous nous assurerons que vous comprenez les risques avant de l'installer."
|
||||
"message": "Montre un avertissement de sécurité avant d'installer un Modrinth Pack (.mrpack) qui n'est pas sur Modrinth."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "M'avertir avant d'installer des modpacks inconnus"
|
||||
@@ -221,6 +221,15 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Impossible de contacter les serveurs d'authentification"
|
||||
},
|
||||
"app.behavior-settings.confirmations.title": {
|
||||
"message": "Confirmations"
|
||||
},
|
||||
"app.behavior-settings.content.title": {
|
||||
"message": "Accueil et contenu"
|
||||
},
|
||||
"app.behavior-settings.startup-and-navigation.title": {
|
||||
"message": "Démarrage et navigation"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "Ajouter le serveur à l'instance"
|
||||
},
|
||||
@@ -242,12 +251,18 @@
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "Retour à l'instance"
|
||||
},
|
||||
"app.browse.discover-project-type": {
|
||||
"message": "Découvrir des {projectType}"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Découvrir des serveurs"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Masquer les serveurs déjà installés"
|
||||
},
|
||||
"app.browse.hide-installed-modpacks": {
|
||||
"message": "Cacher ce qui est déjà installé"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpacks"
|
||||
},
|
||||
@@ -362,9 +377,18 @@
|
||||
"app.instance.admonitions.shared-instance.review-header": {
|
||||
"message": "Examiner les modifications"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-update-button": {
|
||||
"message": "Télécharger la mise à jour"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.reviewing-button": {
|
||||
"message": "Examination..."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-body": {
|
||||
"message": "Une mise à jour est nécessaire pour jouer à {name}. Veuillez mettre à jour vers la dernière version pour lancer le jeu."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-header": {
|
||||
"message": "Une mise à jour est disponible"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Toutes les données pour votre instance seront supprimées à jamais, y compris vos mondes, vos configurations, et le contenu installé."
|
||||
},
|
||||
@@ -431,6 +455,9 @@
|
||||
"app.instance.share.invite-modal.heading": {
|
||||
"message": "Partager {name}"
|
||||
},
|
||||
"app.instance.share.invite-modal.user-limit-reached": {
|
||||
"message": "Cette instance a atteint la limite de {limit} utilisateurs."
|
||||
},
|
||||
"app.instance.share.locked.empty-description-prefix": {
|
||||
"message": "Vous devez vous connecter en tant que"
|
||||
},
|
||||
@@ -449,6 +476,12 @@
|
||||
"app.instance.share.locked.wrong-account-heading": {
|
||||
"message": "Mauvais compte"
|
||||
},
|
||||
"app.instance.share.members.empty": {
|
||||
"message": "Aucun utilisateur n'a encore rejoint"
|
||||
},
|
||||
"app.instance.share.members.no-filter-results": {
|
||||
"message": "Aucun utilisateur ne correspond à vos filtres."
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-access": {
|
||||
"message": "Ils vont désormais cesser de recevoir des mises à jour pour cette instance partagée"
|
||||
},
|
||||
@@ -479,6 +512,12 @@
|
||||
"app.instance.share.sign-in.button": {
|
||||
"message": "Se connecter"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.description": {
|
||||
"message": "Le service d'instance partagées n'est pas disponible pour le moment, veuillez réessayer plus tard"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.heading": {
|
||||
"message": "Impossible de se connecter"
|
||||
},
|
||||
"app.instance.share.unlink.body": {
|
||||
"message": "Vous devez délier ce modpack pour partager votre instance"
|
||||
},
|
||||
@@ -551,6 +590,9 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "Aucun serveur ou monde ajouté"
|
||||
},
|
||||
"app.instance.worlds.refreshing": {
|
||||
"message": "Actualisation..."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "Supprimer le serveur"
|
||||
},
|
||||
@@ -566,12 +608,60 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Rechercher {count} mondes..."
|
||||
},
|
||||
"app.java-detection.cancel": {
|
||||
"message": "Annuler"
|
||||
},
|
||||
"app.java-detection.columns.actions": {
|
||||
"message": "Actions"
|
||||
},
|
||||
"app.java-detection.columns.path": {
|
||||
"message": "Chemin"
|
||||
},
|
||||
"app.java-detection.columns.version": {
|
||||
"message": "Version"
|
||||
},
|
||||
"app.java-detection.no-installations-found": {
|
||||
"message": "Aucune installation Java trouvée."
|
||||
},
|
||||
"app.java-detection.select": {
|
||||
"message": "Sélectionner"
|
||||
},
|
||||
"app.java-detection.selected": {
|
||||
"message": "Sélectionné"
|
||||
},
|
||||
"app.java-detection.title": {
|
||||
"message": "Sélectionner l'installation Java"
|
||||
},
|
||||
"app.java-selector.already-installed": {
|
||||
"message": "Déjà installé"
|
||||
},
|
||||
"app.java-selector.browse": {
|
||||
"message": "Naviguer"
|
||||
},
|
||||
"app.java-selector.detect": {
|
||||
"message": "Détecter"
|
||||
},
|
||||
"app.java-selector.install-recommended": {
|
||||
"message": "Télécharger les fichiers recommandés"
|
||||
},
|
||||
"app.java-selector.installing": {
|
||||
"message": "Installation..."
|
||||
},
|
||||
"app.java-selector.path.placeholder": {
|
||||
"message": "/chemin/vers/java"
|
||||
},
|
||||
"app.java-selector.test-installation": {
|
||||
"message": "Tester l'installation Java"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context": {
|
||||
"message": "Contexte additionnel"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context-placeholder": {
|
||||
"message": "Si possible, incluez des liens et des images pertinentes"
|
||||
},
|
||||
"app.modal.install-to-play.block-user": {
|
||||
"message": "Bloquer l'utilisateur"
|
||||
},
|
||||
"app.modal.install-to-play.content-you-are-reporting": {
|
||||
"message": "L'instance que vous signalez"
|
||||
},
|
||||
@@ -593,6 +683,9 @@
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Cette invitation a été crée par un autre utilisateur Modrinth, pas par Modrinth. N'acceptez seulement les invitations de personnes en qui vous avez confiance."
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning-with-creator": {
|
||||
"message": "Cette invitation a été crée par <creator>{username}</creator>, pas par Modrinth. N'acceptez seulement les invitations de personnes en qui vous avez confiance."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} other {# mods}}"
|
||||
},
|
||||
@@ -650,6 +743,9 @@
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Fichiers non reconnus"
|
||||
},
|
||||
"app.modal.install-to-play.user-blocked": {
|
||||
"message": "Utilisateur bloqué"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Voir le contenu"
|
||||
},
|
||||
@@ -677,6 +773,36 @@
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Une mise à jour est requise pour jouer à {name}. Veuillez mettre à jour vers la dernière version pour lancer le jeu."
|
||||
},
|
||||
"app.nav.create-new-instance": {
|
||||
"message": "Créer une nouvelle instance"
|
||||
},
|
||||
"app.nav.home": {
|
||||
"message": "Accueil"
|
||||
},
|
||||
"app.nav.library": {
|
||||
"message": "Bibliothèque"
|
||||
},
|
||||
"app.nav.modrinth-account": {
|
||||
"message": "Compte Modrinth"
|
||||
},
|
||||
"app.nav.modrinth-hosting": {
|
||||
"message": "Modrinth Hosting"
|
||||
},
|
||||
"app.nav.sign-in-to-modrinth-account": {
|
||||
"message": "Se connecter à un compte Modrinth"
|
||||
},
|
||||
"app.nav.signed-in-as": {
|
||||
"message": "Connecté en tant que <user>{username}</user>"
|
||||
},
|
||||
"app.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Passer à Modrinth+"
|
||||
},
|
||||
"app.news.title": {
|
||||
"message": "Nouveautés"
|
||||
},
|
||||
"app.news.view-all": {
|
||||
"message": "Voir toutes les nouveautés"
|
||||
},
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Ce projet a déjà été installé"
|
||||
},
|
||||
@@ -686,6 +812,9 @@
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Retour vers la page découvrir"
|
||||
},
|
||||
"app.project.install-context.back-to-instance": {
|
||||
"message": "Retour à l'instance"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Toutes les versions"
|
||||
},
|
||||
@@ -698,20 +827,188 @@
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Déjà installé"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-show-tooltip": {
|
||||
"message": "Faites glisser pour montrer les instances récentes"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-tooltip": {
|
||||
"message": "Faire glisser pour redimensionner"
|
||||
},
|
||||
"app.restarting": {
|
||||
"message": "Redémarrage..."
|
||||
},
|
||||
"app.settings.app-version": {
|
||||
"message": "Modrinth App {version}"
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.description": {
|
||||
"message": "Variables d'environnement définies lors du lancement d'une instance."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.placeholder": {
|
||||
"message": "Entrer les variables d'environnement..."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.title": {
|
||||
"message": "Variables d'environnement"
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.description": {
|
||||
"message": "Démarre les instances en plein écran en modifiant leur fichier options.txt."
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.title": {
|
||||
"message": "Plein écran"
|
||||
},
|
||||
"app.settings.default-instance-options.height.description": {
|
||||
"message": "La hauteur de la fenêtre de jeu lors du lancement."
|
||||
},
|
||||
"app.settings.default-instance-options.height.placeholder": {
|
||||
"message": "Entrer la hauteur"
|
||||
},
|
||||
"app.settings.default-instance-options.height.title": {
|
||||
"message": "Hauteur"
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.description": {
|
||||
"message": "Arguments transmis à Java lors du lancement d'une instance."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.placeholder": {
|
||||
"message": "Entrer les arguments Java..."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.title": {
|
||||
"message": "Arguments Java"
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.description": {
|
||||
"message": "Mémoire maximale disponible pour chaque instance."
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.title": {
|
||||
"message": "Allocation de la mémoire"
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.description": {
|
||||
"message": "S'exécute après que le jeu se ferme."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.placeholder": {
|
||||
"message": "Entrez la commande à exécuter après la fermeture..."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.title": {
|
||||
"message": "Hook de post-fermeture"
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.description": {
|
||||
"message": "S'exécute avant que l'instance démarre."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.placeholder": {
|
||||
"message": "Entrez la commande de pré-lancement..."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.title": {
|
||||
"message": "Hook de pré-lancement"
|
||||
},
|
||||
"app.settings.default-instance-options.width.description": {
|
||||
"message": "La largeur de la fenêtre de jeu lors du lancement."
|
||||
},
|
||||
"app.settings.default-instance-options.width.placeholder": {
|
||||
"message": "Entrer la largeur..."
|
||||
},
|
||||
"app.settings.default-instance-options.width.title": {
|
||||
"message": "Largeur"
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.description": {
|
||||
"message": "Commande utilisée pour encapsuler le processus de lancement de Minecraft."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.placeholder": {
|
||||
"message": "Entrez la commande wrapper..."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.title": {
|
||||
"message": "Wrapper hook"
|
||||
},
|
||||
"app.settings.developer-mode-button.label": {
|
||||
"message": "Basculer le mode développeur"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Mode développeur activé."
|
||||
},
|
||||
"app.settings.downloading": {
|
||||
"message": "Téléchargement de la version {version}"
|
||||
},
|
||||
"app.settings.java-installations.location.title": {
|
||||
"message": "Emplacement de Java {version, number}"
|
||||
},
|
||||
"app.settings.operating-system.macos": {
|
||||
"message": "macOS"
|
||||
},
|
||||
"app.settings.privacy.ads-consent.intro": {
|
||||
"message": "Les publicités rendent Modrinth possible et financent les rémunérations des créateurs. Nos partenaires peuvent stocker des cookies ou y accéder au sein de l'application afin de personnaliser les publicités et de mesurer les performances. Vous pouvez refuser ou gérer vos préférences ci-dessous."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.description": {
|
||||
"message": "Affiche Modrinth App en tant que votre activité actuelle sur Discord. Cela n'affecte pas Rich Presence ajouté à l'instance par les mods. Nécessite un redémarrage de l'application."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.title": {
|
||||
"message": "Discord Rich Presence"
|
||||
},
|
||||
"app.settings.privacy.telemetry.description": {
|
||||
"message": "Modrinth collecte des données d'analyse et d'utilisation anonymes afin d'améliorer l'expérience utilisateur et de personnaliser votre expérience. En désactivant cette option, vous choisissez de ne plus participer et vos données ne seront plus collectées."
|
||||
},
|
||||
"app.settings.privacy.telemetry.title": {
|
||||
"message": "Télémétrie"
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.description": {
|
||||
"message": "Afficher l’action Copier les détails lorsqu’une installation est en attente ou en cours. Elle est toujours disponible pour les installations échouées ou interrompues."
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.title": {
|
||||
"message": "Toujours afficher les détails de copie"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.description": {
|
||||
"message": "L'application peut se charger plus lentement jusqu'à ce que le cache soit reconstruit."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.title": {
|
||||
"message": "Purger le cache de l'application ?"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.description": {
|
||||
"message": "Nettoyer des données cachées et les télécharger de nouveau depuis Modrinth. L'application peut charger plus lentement jusqu'à ce que le cache soit de nouveau reconstitué."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.purge": {
|
||||
"message": "Purger le cache"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.title": {
|
||||
"message": "Cache de l'application"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.description": {
|
||||
"message": "Les sauvegardes de vos données de l'application les plus importantes sont enregistrées ici au cas où vous avez besoin de les récupérer plus tard."
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.open-folder": {
|
||||
"message": "Ouvrir le dossier de sauvegardes"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.title": {
|
||||
"message": "Sauvegardes de la base de données de l’application"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.browse": {
|
||||
"message": "Parcourir pour le répertoire de l'application"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.description": {
|
||||
"message": "Où Modrinth App stocke les instances et les autres fichiers. Changer prend effet après avoir redémarré l'application."
|
||||
},
|
||||
"app.settings.resource-management.app-directory.select": {
|
||||
"message": "Sélectionner un nouveau répertoire pour l'application"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.title": {
|
||||
"message": "Répertoire de l'application"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.description": {
|
||||
"message": "Nombre de fichiers que l'application peut télécharger simultanément. Baissez ceci si les téléchargements sont peu fiables sur votre connexion. Nécessite un redémarrage de l'application."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.title": {
|
||||
"message": "Nombre maximal de téléchargements simultanés"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.description": {
|
||||
"message": "Nombre de fichiers que l'application peut écrire sur le disque simultanément. Baissez ceci si vous rencontrez fréquemment des erreurs d'écriture / lecture. Nécessite un redémarrage de l'application."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.title": {
|
||||
"message": "Nombre maximal d'écritures simultanées"
|
||||
},
|
||||
"app.settings.sidebar.label.instances": {
|
||||
"message": "Instance"
|
||||
},
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Apparence"
|
||||
},
|
||||
"app.settings.tabs.behavior": {
|
||||
"message": "Comportement"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Options d’instance par défaut"
|
||||
"message": "Options de jeu par défaut"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Installations de Java"
|
||||
@@ -725,6 +1022,9 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "Gestion des ressources"
|
||||
},
|
||||
"app.sidebar.playing-as": {
|
||||
"message": "Joue en tant que"
|
||||
},
|
||||
"app.skins.add-button": {
|
||||
"message": "Ajouter un skin"
|
||||
},
|
||||
@@ -884,6 +1184,21 @@
|
||||
"app.skins.toggle-ears-features-on": {
|
||||
"message": "Activer"
|
||||
},
|
||||
"app.survey.body": {
|
||||
"message": "Cela vous dérangerait-il de répondre à quelques questions sur votre expérience avec l'application Modrinth ?"
|
||||
},
|
||||
"app.survey.footer": {
|
||||
"message": "Ces retours seront transmis directement à l'équipe de Modrinth et aideront à orienter les futures mises à jour !"
|
||||
},
|
||||
"app.survey.no-thanks": {
|
||||
"message": "Non merci"
|
||||
},
|
||||
"app.survey.take-survey": {
|
||||
"message": "Répondre au sondage"
|
||||
},
|
||||
"app.survey.title": {
|
||||
"message": "Salut, utilisateur de Modrinth !"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} a finie d'être téléchargée. Rechargez pour mettre à jour maintenant, ou automatiquement quand vous fermez Modrinth App."
|
||||
},
|
||||
@@ -914,6 +1229,9 @@
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "La version {version} a été téléchargée avec succès !"
|
||||
},
|
||||
"app.user.project.install-to-instance": {
|
||||
"message": "Installer dans l'instance"
|
||||
},
|
||||
"app.world.server-modal.placeholder-address": {
|
||||
"message": "exemple.modrinth.gg"
|
||||
},
|
||||
@@ -1059,7 +1377,7 @@
|
||||
"message": "Dissocier l'instance partagée"
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.admonition-body": {
|
||||
"message": "Cela supprime l'instance partagée des serveurs de Modrinth. Les personnes l'utilisant dans l'application Modrinth vont cesser de recevoir des mises à jour, mais votre instance locale et son contenu resteront sur cet appareil."
|
||||
"message": "Cela supprime l'instance partagée des serveurs de Modrinth. Les personnes l'utilisant dans Modrinth App vont cesser de recevoir des mises à jour, mais votre instance locale et son contenu resteront sur cet appareil."
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.admonition-header": {
|
||||
"message": "Dépublication de l'instance partagée"
|
||||
@@ -1157,6 +1475,45 @@
|
||||
"instance.server-modal.resource-pack": {
|
||||
"message": "Pack de ressources"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.actions": {
|
||||
"message": "Actions"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.code": {
|
||||
"message": "Lien d'invitation"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.description": {
|
||||
"message": "N'importe qui avec l'un de ces liens d'invitation peut rejoindre pendant qu'il reste actif."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.empty": {
|
||||
"message": "Il n'y a aucune invitation active."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.expires": {
|
||||
"message": "Expire"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke": {
|
||||
"message": "Révoquer l'invitation"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke-with-code": {
|
||||
"message": "Révoquer l'invitation {code}"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.title": {
|
||||
"message": "Invitations actives"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.uses": {
|
||||
"message": "Utilisations"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-body": {
|
||||
"message": "Le lien d'invitation <monospace>{code}</monospace> cessera de fonctionner immédiatement. Les personnes qui ont déjà rejoint conserveront leur accès."
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-header": {
|
||||
"message": "Cette action ne peut pas être annulée"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.confirm": {
|
||||
"message": "Révoquer l'invitation"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.header": {
|
||||
"message": "Révoquer l'invitation"
|
||||
},
|
||||
"instance.settings.tabs.general": {
|
||||
"message": "Général"
|
||||
},
|
||||
@@ -1260,11 +1617,32 @@
|
||||
"message": "Exécuté avant lancement."
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch.enter": {
|
||||
"message": "Entrer commande de pré-lancement..."
|
||||
"message": "Entrez la commande de pré-lancement..."
|
||||
},
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Crochets de lancement"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.description": {
|
||||
"message": "Les hooks s’exécutent dans le répertoire de travail de l’instance et disposent des variables suivantes :"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-dir.description": {
|
||||
"message": "$INST_DIR: Chemin absolu vers le dossier de l'instance"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-id.description": {
|
||||
"message": "$INST_ID: Le nom du dossier de l'instance"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java-args.description": {
|
||||
"message": "$INST_JAVA_ARGS: Les arguments java fournis au jeu"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java.description": {
|
||||
"message": "$INST_JAVA: Le chemin absolu vers le binaire Java"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-mc-dir.description": {
|
||||
"message": "$INST_MC_DIR: Un alis de $INST_DIR"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-name.description": {
|
||||
"message": "$INST_NAME: Le nom de l'instance"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper": {
|
||||
"message": "Wrapper"
|
||||
},
|
||||
@@ -1308,7 +1686,7 @@
|
||||
"message": "Variables d'environnement"
|
||||
},
|
||||
"instance.settings.tabs.java.hooks": {
|
||||
"message": "Crochets"
|
||||
"message": "Hooks"
|
||||
},
|
||||
"instance.settings.tabs.java.java-arguments": {
|
||||
"message": "Arguments Java"
|
||||
@@ -1358,6 +1736,12 @@
|
||||
"instance.shared-instance.error.title": {
|
||||
"message": "Quelque chose s'est mal passé"
|
||||
},
|
||||
"instance.shared-instance.network-error.text": {
|
||||
"message": "Impossible de se connecter à l'API des instances partagées"
|
||||
},
|
||||
"instance.shared-instance.network-error.title": {
|
||||
"message": "Erreur de réseau"
|
||||
},
|
||||
"instance.shared-instance.owner-tooltip": {
|
||||
"message": "Le contenu de cette instance est partagé à d'autres utilisateurs."
|
||||
},
|
||||
@@ -1493,9 +1877,6 @@
|
||||
"modal.modrinth-account-required.browser-description": {
|
||||
"message": "A nouvel onglet a été ouvert pour vous connecter. Finissez la connexion, puis retournez dans l'application."
|
||||
},
|
||||
"modal.modrinth-account-required.cancel-button": {
|
||||
"message": "Annuler"
|
||||
},
|
||||
"modal.modrinth-account-required.continue-in-browser-heading": {
|
||||
"message": "Continuer dans votre navigateur"
|
||||
},
|
||||
@@ -1549,5 +1930,11 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Le loader est procuré par le serveur"
|
||||
},
|
||||
"settings.sidebar.label.account": {
|
||||
"message": "Compte"
|
||||
},
|
||||
"settings.sidebar.label.display": {
|
||||
"message": "Affichage"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,9 +20,6 @@
|
||||
"app.action-bar.stop-instance": {
|
||||
"message": ""
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "מאפשר עיבוד מתקדם כגון אפקטים טשטוש העלולים לגרום לבעיות ביצועים ללא עיבוד מואץ לחומרה."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "חזרה לעולמות"
|
||||
},
|
||||
@@ -161,9 +158,6 @@
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "מראה"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "אפשרויות ברירת מחדל של התקנה"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "התקנות ג'אווה"
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -44,21 +44,12 @@
|
||||
"app.action-bar.view-logs": {
|
||||
"message": "Lihat catatan"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Menghidupkan renderasi tingkat lanjut seperti efek buram yang dapat menyebabkan masalah kinerja tanpa renderasi yang dipercepat perangkat keras."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Renderasi tingkat lanjut"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Pilih tema warna pilihan Anda untuk Modrinth App."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Tema warna"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Ubah halaman utama yang dibuka oleh peluncur."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Beranda"
|
||||
},
|
||||
@@ -68,45 +59,15 @@
|
||||
"app.appearance-settings.default-landing-page.title": {
|
||||
"message": "Halaman arahan bawaan"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Mematikan label nama di atas wujud pemain Anda pada halaman rupa."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Sembunyikan label nama"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Menyertakan dunia terkini dalam bagian \"Masuk kembali\" pada Beranda."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Masuk kembali ke dunia"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Kecilkan pluncur ketika proses Minecraft berjalan."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Kecilkan peluncur"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Gunakan bingkai jendela sistem (wajib menjalankan ulang aplikasi)."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Hiasan asli"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Menampilkan seberapa lama Anda memainkan sebuah instans."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Tampilkan waktu bermain"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Menghidupkan kemampuan untuk menghidupkan dan mematikan bilah sisi."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Hidup/matikan bilah sisi"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Bila Anda mencoba memasangkan berkas Modrinth Pack (.mrpack) yang tidak dihoskan pada Modrinth, kami akan memastikan Anda untuk memahami risikonya sebelum memasangkannya."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "Peringatkan saya sebelum memasang paket mod tidak dikenal"
|
||||
},
|
||||
@@ -272,9 +233,6 @@
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Tampilan"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Pilihan instans bawaan"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Pemasangan Java"
|
||||
},
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
"message": "Copiati"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Copia dettagli"
|
||||
"message": "Copia info"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Ignora"
|
||||
@@ -144,19 +144,19 @@
|
||||
"message": "La tua privacy e come le pubblicità supportano Modrinth"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Abilita alcuni effetti come la sfocatura, ma può causare problemi di prestazioni senza accelerazione hardware."
|
||||
"message": "Abilita effetti come lo sfondo sfocato. Questo potrebbe ridurre le prestazioni senza accelerazione hardware."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Rendering avanzato"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Scegli il tema che Modrinth App userà su questo dispositivo."
|
||||
"message": "Scegli il tema usato da Modrinth App."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Tema"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Imposta la pagina che si aprirà all'avvio del launcher."
|
||||
"message": "Scegli la pagina che Modrinth App mostrerà all'avvio."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Home"
|
||||
@@ -168,10 +168,10 @@
|
||||
"message": "Pagina di avvio"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Rimuove il nametag sopra la testa del giocatore nella pagina delle skin."
|
||||
"message": "Nasconde il tuo nome dalle anteprime della pagina delle Skin."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Nascondi il nome"
|
||||
"message": "Nascondi nome"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Elenca i mondi recenti nella sezione \"Avvio rapido\" della pagina Home."
|
||||
@@ -180,37 +180,37 @@
|
||||
"message": "Avvio rapido nei mondi"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Riduci il launcher a icona quando si avvia Minecraft."
|
||||
"message": "Minimizza l'app all'avvio di Minecraft."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Riduci a icona"
|
||||
"message": "Minimizza app"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Usa la cornice di sistema (riavvio necessario)."
|
||||
"message": "Usa la barra e i controlli delle finestre di sistema. Richiede un riavvio."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Decorazioni native"
|
||||
"message": "Usa cornice di sistema"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Mostra quanto tempo hai speso giocando a un'istanza."
|
||||
"message": "Mostra quanto tempo hai giocato a un'istanza."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Mostra le ore di gioco"
|
||||
"message": "Mostra ore di gioco"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Salta automaticamente le conferme a basso rischio, come l'installazione di pacchetti di mod duplicati, la normale eliminazione di contenuti, gli aggiornamenti simultanei, lo scollegare i pacchetti di mod e le richieste di riparazione. Le avvertenze verranno comunque mostrate."
|
||||
"message": "Salta le conferme a basso rischio come l'installazione duplicata, l'eliminazione di contenuti, gli aggiornamenti simultanei, lo scollegare e il riparare. Gli avvisi per operazioni pericolose verranno comunque mostrati."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Salta le conferme meno importanti"
|
||||
"message": "Salta conferme meno importanti"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Mostra o nascondi la barra laterale."
|
||||
"message": "Nascondi la barra laterale destra e aggiungi un pulsante per mostrarla."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Abilita la barra laterale"
|
||||
"message": "Nascondi barra laterale destra"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Mostrerà un avviso prima di installare un file Modrinth Pack (.mrpack) non proveniente da Modrinth, a causa dei possibili rischi."
|
||||
"message": "Mostra un avviso di sicurezza prima di installare un Modrinth Pack (.mrpack) non disponibile su Modrinth."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "Avvisami quando installo pacchetti sconosciuti"
|
||||
@@ -221,6 +221,15 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Impossibile raggiungere i server di autenticazione"
|
||||
},
|
||||
"app.behavior-settings.confirmations.title": {
|
||||
"message": "Conferme"
|
||||
},
|
||||
"app.behavior-settings.content.title": {
|
||||
"message": "Home e contenuti"
|
||||
},
|
||||
"app.behavior-settings.startup-and-navigation.title": {
|
||||
"message": "Avvio e navigazione"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "Aggiungendo il server all'istanza"
|
||||
},
|
||||
@@ -242,12 +251,18 @@
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "Torna all'istanza"
|
||||
},
|
||||
"app.browse.discover-project-type": {
|
||||
"message": "Scopri {projectType}"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Sfoglia i server"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Nascondi server già aggiunti"
|
||||
},
|
||||
"app.browse.hide-installed-modpacks": {
|
||||
"message": "Nascondi già installati"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Pacchetti di mod"
|
||||
},
|
||||
@@ -362,14 +377,23 @@
|
||||
"app.instance.admonitions.shared-instance.review-header": {
|
||||
"message": "Revisiona modifiche"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-update-button": {
|
||||
"message": "Revisiona aggiornamento"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.reviewing-button": {
|
||||
"message": "Revisione..."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-body": {
|
||||
"message": "{name} richiede degli aggiornamenti. Installa l'ultima versione per poter giocare."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-header": {
|
||||
"message": "Aggiornamento disponibile"
|
||||
},
|
||||
"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"
|
||||
"message": "Questa azione è irreversibile"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Elimina istanza"
|
||||
@@ -428,6 +452,9 @@
|
||||
"app.instance.share.invite-modal.heading": {
|
||||
"message": "Condividi {name}"
|
||||
},
|
||||
"app.instance.share.invite-modal.user-limit-reached": {
|
||||
"message": "Questa istanza ha raggiunto il limite di {limit} utenti."
|
||||
},
|
||||
"app.instance.share.locked.empty-description-prefix": {
|
||||
"message": "Devi effettuare l'accesso come"
|
||||
},
|
||||
@@ -446,6 +473,12 @@
|
||||
"app.instance.share.locked.wrong-account-heading": {
|
||||
"message": "Account sbagliato"
|
||||
},
|
||||
"app.instance.share.members.empty": {
|
||||
"message": "Nessun utente è entrato"
|
||||
},
|
||||
"app.instance.share.members.no-filter-results": {
|
||||
"message": "Nessun utente corrisponde ai filtri."
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-access": {
|
||||
"message": "Non riceveranno più gli aggiornamenti di questa istanza condivisa"
|
||||
},
|
||||
@@ -476,6 +509,12 @@
|
||||
"app.instance.share.sign-in.button": {
|
||||
"message": "Accedi"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.description": {
|
||||
"message": "Il servizio delle istanze condivise non è disponibile al momento, riprova più tardi"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.heading": {
|
||||
"message": "Impossibile connettersi"
|
||||
},
|
||||
"app.instance.share.unlink.body": {
|
||||
"message": "Devi scollegare questo pacchetto per condividere l'istanza"
|
||||
},
|
||||
@@ -525,7 +564,7 @@
|
||||
"message": "Eliminare il mondo"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-body": {
|
||||
"message": "Questo mondo verrà eliminato permanentemente dall'istanza. Questa azione non può essere annullata."
|
||||
"message": "Il mondo sarà eliminato dall'istanza per sempre. Questa azione è irreversibile."
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-header": {
|
||||
"message": "Eliminare {name}"
|
||||
@@ -548,6 +587,9 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "Nessun server o mondo aggiunto"
|
||||
},
|
||||
"app.instance.worlds.refreshing": {
|
||||
"message": "Ricaricamento..."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "Rimuovi server"
|
||||
},
|
||||
@@ -563,14 +605,62 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Cerca tra {count} mondi..."
|
||||
},
|
||||
"app.java-detection.cancel": {
|
||||
"message": "Annulla"
|
||||
},
|
||||
"app.java-detection.columns.actions": {
|
||||
"message": "Azioni"
|
||||
},
|
||||
"app.java-detection.columns.path": {
|
||||
"message": "Percorso"
|
||||
},
|
||||
"app.java-detection.columns.version": {
|
||||
"message": "Versione"
|
||||
},
|
||||
"app.java-detection.no-installations-found": {
|
||||
"message": "Nessuna installazione di Java trovata."
|
||||
},
|
||||
"app.java-detection.select": {
|
||||
"message": "Seleziona"
|
||||
},
|
||||
"app.java-detection.selected": {
|
||||
"message": "Selezionata"
|
||||
},
|
||||
"app.java-detection.title": {
|
||||
"message": "Seleziona l'installazione di Java"
|
||||
},
|
||||
"app.java-selector.already-installed": {
|
||||
"message": "Già installata"
|
||||
},
|
||||
"app.java-selector.browse": {
|
||||
"message": "Esplora"
|
||||
},
|
||||
"app.java-selector.detect": {
|
||||
"message": "Rileva"
|
||||
},
|
||||
"app.java-selector.install-recommended": {
|
||||
"message": "Installa consigliata"
|
||||
},
|
||||
"app.java-selector.installing": {
|
||||
"message": "Installazione..."
|
||||
},
|
||||
"app.java-selector.path.placeholder": {
|
||||
"message": "/percorso/di/java"
|
||||
},
|
||||
"app.java-selector.test-installation": {
|
||||
"message": "Prova l'installazione di Java"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context": {
|
||||
"message": "Contesto aggiuntivo"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context-placeholder": {
|
||||
"message": "Se possibile, includi link e immagini pertinenti"
|
||||
},
|
||||
"app.modal.install-to-play.block-user": {
|
||||
"message": "Blocca"
|
||||
},
|
||||
"app.modal.install-to-play.content-you-are-reporting": {
|
||||
"message": "L'istanza che stai segnalando"
|
||||
"message": "Istanza da segnalare"
|
||||
},
|
||||
"app.modal.install-to-play.delete-instance": {
|
||||
"message": "Elimina istanza"
|
||||
@@ -590,6 +680,9 @@
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Questo invito è stato creato da un utente e non da Modrinth. Accetta solo gli inviti da persone fidate."
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning-with-creator": {
|
||||
"message": "Questo invito è stato creato da <creator>{username}</creator>, non da Modrinth. Accetta solo gli inviti da persone fidate."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count} mod"
|
||||
},
|
||||
@@ -647,6 +740,9 @@
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "File non riconosciuti"
|
||||
},
|
||||
"app.modal.install-to-play.user-blocked": {
|
||||
"message": "Bloccato"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Mostra contenuti"
|
||||
},
|
||||
@@ -674,6 +770,36 @@
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "{name} richiede degli aggiornamenti. Installa l'ultima versione per poter giocare."
|
||||
},
|
||||
"app.nav.create-new-instance": {
|
||||
"message": "Crea nuova istanza"
|
||||
},
|
||||
"app.nav.home": {
|
||||
"message": "Home"
|
||||
},
|
||||
"app.nav.library": {
|
||||
"message": "Libreria"
|
||||
},
|
||||
"app.nav.modrinth-account": {
|
||||
"message": "Account Modrinth"
|
||||
},
|
||||
"app.nav.modrinth-hosting": {
|
||||
"message": "Modrinth Hosting"
|
||||
},
|
||||
"app.nav.sign-in-to-modrinth-account": {
|
||||
"message": "Accedi a un account Modrinth"
|
||||
},
|
||||
"app.nav.signed-in-as": {
|
||||
"message": "Accesso effettuato come <user>{username}</user>"
|
||||
},
|
||||
"app.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Abbonati a Modrinth+"
|
||||
},
|
||||
"app.news.title": {
|
||||
"message": "Notizie"
|
||||
},
|
||||
"app.news.view-all": {
|
||||
"message": "Leggi tutte le notizie"
|
||||
},
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Questo progetto è già stato installato"
|
||||
},
|
||||
@@ -683,6 +809,9 @@
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Torna a Esplora"
|
||||
},
|
||||
"app.project.install-context.back-to-instance": {
|
||||
"message": "Torna all'istanza"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Tutte le versioni"
|
||||
},
|
||||
@@ -695,20 +824,188 @@
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Già installata"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-show-tooltip": {
|
||||
"message": "Trascina per mostrare le istanze recenti"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-tooltip": {
|
||||
"message": "Trascina per ridimensionare"
|
||||
},
|
||||
"app.restarting": {
|
||||
"message": "Riavvio..."
|
||||
},
|
||||
"app.settings.app-version": {
|
||||
"message": "Modrinth App {version}"
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.description": {
|
||||
"message": "Variabili d'ambiente impostati all'avvio di un'istanza."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.placeholder": {
|
||||
"message": "Inserisci le variabili d'ambiente..."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.title": {
|
||||
"message": "Variabili d'ambiente"
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.description": {
|
||||
"message": "Avvia le istanze in schermo intero modificando il loro options.txt."
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.title": {
|
||||
"message": "Schermo intero"
|
||||
},
|
||||
"app.settings.default-instance-options.height.description": {
|
||||
"message": "L'altezza della finestra del gioco all'avvio."
|
||||
},
|
||||
"app.settings.default-instance-options.height.placeholder": {
|
||||
"message": "Inserisci l'altezza..."
|
||||
},
|
||||
"app.settings.default-instance-options.height.title": {
|
||||
"message": "Altezza"
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.description": {
|
||||
"message": "Argomenti passati a Java all'avvio di un'istanza."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.placeholder": {
|
||||
"message": "Inserisci gli argomenti Java..."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.title": {
|
||||
"message": "Argomenti Java"
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.description": {
|
||||
"message": "Memoria massima disponibile a ogni istanza."
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.title": {
|
||||
"message": "Allocazione memoria"
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.description": {
|
||||
"message": "Si esegue dopo la chiusura del gioco."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.placeholder": {
|
||||
"message": "Inserisci il comando post-uscita..."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.title": {
|
||||
"message": "Hook post-uscita"
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.description": {
|
||||
"message": "Si esegue prima dell'avvio dell'istanza."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.placeholder": {
|
||||
"message": "Inserisci il comando pre-avvio..."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.title": {
|
||||
"message": "Hook pre-avvio"
|
||||
},
|
||||
"app.settings.default-instance-options.width.description": {
|
||||
"message": "La larghezza della finestra del gioco all'avvio."
|
||||
},
|
||||
"app.settings.default-instance-options.width.placeholder": {
|
||||
"message": "Inserisci la larghezza..."
|
||||
},
|
||||
"app.settings.default-instance-options.width.title": {
|
||||
"message": "Larghezza"
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.description": {
|
||||
"message": "Comando utilizzato per avvolgere il processo di avvio di Minecraft."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.placeholder": {
|
||||
"message": "Inserisci il comando del wrapper..."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.title": {
|
||||
"message": "Hook wrapper"
|
||||
},
|
||||
"app.settings.developer-mode-button.label": {
|
||||
"message": "Abilita o disabilita la modalità sviluppatore"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Modalità sviluppatore attiva."
|
||||
},
|
||||
"app.settings.downloading": {
|
||||
"message": "Scaricando v{version}"
|
||||
"message": "Scaricando la v{version}"
|
||||
},
|
||||
"app.settings.java-installations.location.title": {
|
||||
"message": "Percorso di Java {version, number}"
|
||||
},
|
||||
"app.settings.operating-system.macos": {
|
||||
"message": "macOS"
|
||||
},
|
||||
"app.settings.privacy.ads-consent.intro": {
|
||||
"message": "Le pubblicità aiutano Modrinth a crescere e a finanziare i creatori. I nostri partner potrebbero memorizzare o accedere ai cookie nell'app per personalizzare e misurarne le prestazioni. Di seguito puoi scegliere di disdire o di gestire le opzioni."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.description": {
|
||||
"message": "Mostra Modrinth App come attività su Discord. Ciò non blocca le mod che mostrano la loro Rich Presence. Richiede un riavvio."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.title": {
|
||||
"message": "Rich Presence su Discord"
|
||||
},
|
||||
"app.settings.privacy.telemetry.description": {
|
||||
"message": "Modrinth raccoglie analitiche e dati anonimi per migliorare l'esperienza utente e personalizzarne la tua. Disabilitando questa opzione, i tuoi dati non verranno più raccolti."
|
||||
},
|
||||
"app.settings.privacy.telemetry.title": {
|
||||
"message": "Telemetria"
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.description": {
|
||||
"message": "Mostra il pulsante Copia info mentre un'installazione è in coda o in esecuzione. Verrà sempre mostrato dopo un errore o un'interruzione."
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.title": {
|
||||
"message": "Mostra sempre il pulsante Copia info"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.description": {
|
||||
"message": "L'app potrebbe caricarsi più lentamente finché la cache non sarà ripristinata."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.title": {
|
||||
"message": "Eliminare la cache?"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.description": {
|
||||
"message": "Elimina la cache e riscarica tutto da Modrinth. L'app potrebbe caricarsi più lentamente finché la cache non sarà ripristinata."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.purge": {
|
||||
"message": "Elimina cache"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.title": {
|
||||
"message": "Cache dell'app"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.description": {
|
||||
"message": "Qui vengono salvati i backup dei dati importanti dell'app, nel caso in cui fosse necessario recuperarli."
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.open-folder": {
|
||||
"message": "Apri la cartella dei backup"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.title": {
|
||||
"message": "Backup del database dell'app"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.browse": {
|
||||
"message": "Esplora una cartella per l'app"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.description": {
|
||||
"message": "Dove Modrinth App memorizza le istanze e altri file. Le modifiche avranno effetto dopo un riavvio."
|
||||
},
|
||||
"app.settings.resource-management.app-directory.select": {
|
||||
"message": "Seleziona la nuova cartella dell'app"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.title": {
|
||||
"message": "Cartella dell'app"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.description": {
|
||||
"message": "Il numero di file che l'app può scaricare contemporaneamente. Decrementa se i download risultano instabili sulla tua connessione. Richiede un riavvio."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.title": {
|
||||
"message": "Massimo di download simultanei"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.description": {
|
||||
"message": "Il numero di file che l'app può salvare sul disco contemporaneamente. Decrementa se riscontri problemi d'archiviazione frequenti. Richiede un riavvio."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.title": {
|
||||
"message": "Massimo di scritture simultanee"
|
||||
},
|
||||
"app.settings.sidebar.label.instances": {
|
||||
"message": "Istanze"
|
||||
},
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Aspetto"
|
||||
},
|
||||
"app.settings.tabs.behavior": {
|
||||
"message": "Comportamento"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Opzioni d'istanza predefinite"
|
||||
"message": "Opzioni di gioco predefinite"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Installazioni Java"
|
||||
@@ -722,6 +1019,9 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "Gestione delle risorse"
|
||||
},
|
||||
"app.sidebar.playing-as": {
|
||||
"message": "Accesso effettuato come"
|
||||
},
|
||||
"app.skins.add-button": {
|
||||
"message": "Nuova skin"
|
||||
},
|
||||
@@ -735,7 +1035,7 @@
|
||||
"message": "Elimina"
|
||||
},
|
||||
"app.skins.delete-modal.description": {
|
||||
"message": "Questa skin sarà rimossa per sempre. Quest'azione non può essere annullata."
|
||||
"message": "La skin selezionata sarà eliminata per sempre. Questa azione è irreversibile."
|
||||
},
|
||||
"app.skins.delete-modal.title": {
|
||||
"message": "Vuoi davvero eliminare questa skin?"
|
||||
@@ -881,6 +1181,21 @@
|
||||
"app.skins.toggle-ears-features-on": {
|
||||
"message": "Attiva"
|
||||
},
|
||||
"app.survey.body": {
|
||||
"message": "Ti dispiacerebbe rispondere ad alcune domande sulla tua esperienza con Modrinth App?"
|
||||
},
|
||||
"app.survey.footer": {
|
||||
"message": "Le tue risposte andranno direttamente al team di Modrinth e aiuteranno a guidare gli aggiornamenti futuri!"
|
||||
},
|
||||
"app.survey.no-thanks": {
|
||||
"message": "No, grazie"
|
||||
},
|
||||
"app.survey.take-survey": {
|
||||
"message": "Vai al sondaggio"
|
||||
},
|
||||
"app.survey.title": {
|
||||
"message": "Ciao, utente di Modrinth!"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} è stata scaricata. Riavvia per aggiornare ora, o avverrà in automatico alla chiusura dell'app."
|
||||
},
|
||||
@@ -911,6 +1226,9 @@
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "La versione {version} è stata installata con successo!"
|
||||
},
|
||||
"app.user.project.install-to-instance": {
|
||||
"message": "Installa nell'istanza"
|
||||
},
|
||||
"app.world.server-modal.placeholder-address": {
|
||||
"message": "example.modrinth.gg"
|
||||
},
|
||||
@@ -1157,6 +1475,45 @@
|
||||
"instance.server-modal.resource-pack": {
|
||||
"message": "Pacchetto di risorse"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.actions": {
|
||||
"message": "Azioni"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.code": {
|
||||
"message": "Link d'invito"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.description": {
|
||||
"message": "Chiunque abbia uno di questi inviti potrà entrare finché siano attivi."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.empty": {
|
||||
"message": "Non ci sono inviti attivi."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.expires": {
|
||||
"message": "Scadenza"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke": {
|
||||
"message": "Revoca invito"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke-with-code": {
|
||||
"message": "Revoca invito {code}"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.title": {
|
||||
"message": "Inviti attivi"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.uses": {
|
||||
"message": "Usi"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-body": {
|
||||
"message": "L'invito <monospace>{code}</monospace> smetterà di funzionare immediatamente. Le persone già entrate manterranno l'accesso."
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-header": {
|
||||
"message": "Questa azione è irreversibile"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.confirm": {
|
||||
"message": "Revoca invito"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.header": {
|
||||
"message": "Revoca invito"
|
||||
},
|
||||
"instance.settings.tabs.general": {
|
||||
"message": "Generale"
|
||||
},
|
||||
@@ -1265,6 +1622,27 @@
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Hook all'avvio del gioco"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.description": {
|
||||
"message": "Gli hook si eseguono nella cartella principale dell'istanza, con le seguenti variabili:"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-dir.description": {
|
||||
"message": "$INST_DIR: Il percorso assoluto della cartella dell'istanza"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-id.description": {
|
||||
"message": "$INST_ID: Il nome della cartella dell'istanza"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java-args.description": {
|
||||
"message": "$INST_JAVA_ARGS: Gli argomenti JVM forniti al gioco"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java.description": {
|
||||
"message": "$INST_JAVA: Il percorso assoluto dei binari di Java"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-mc-dir.description": {
|
||||
"message": "$INST_MC_DIR: Alias di $INST_DIR"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-name.description": {
|
||||
"message": "$INST_NAME: Il nome dell'istanza"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper": {
|
||||
"message": "Wrapper"
|
||||
},
|
||||
@@ -1358,6 +1736,12 @@
|
||||
"instance.shared-instance.error.title": {
|
||||
"message": "Qualcosa è andato storto"
|
||||
},
|
||||
"instance.shared-instance.network-error.text": {
|
||||
"message": "Impossibile connettersi all'API delle istanze condivise"
|
||||
},
|
||||
"instance.shared-instance.network-error.title": {
|
||||
"message": "Errore di connessione"
|
||||
},
|
||||
"instance.shared-instance.owner-tooltip": {
|
||||
"message": "I contenuti dell'istanza stanno venendo condivisi agli utenti."
|
||||
},
|
||||
@@ -1493,9 +1877,6 @@
|
||||
"modal.modrinth-account-required.browser-description": {
|
||||
"message": "Si è aperta una nuova scheda per effettuare l'accesso. Poi torna all'app."
|
||||
},
|
||||
"modal.modrinth-account-required.cancel-button": {
|
||||
"message": "Annulla"
|
||||
},
|
||||
"modal.modrinth-account-required.continue-in-browser-heading": {
|
||||
"message": "Continua nel browser"
|
||||
},
|
||||
@@ -1549,5 +1930,11 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Il loader è determinato dal server"
|
||||
},
|
||||
"settings.sidebar.label.account": {
|
||||
"message": "Account"
|
||||
},
|
||||
"settings.sidebar.label.display": {
|
||||
"message": "Visualizzazione"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,6 +89,9 @@
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "不明なインスタンス"
|
||||
},
|
||||
"app.action-bar.install.updating-shared-content": {
|
||||
"message": "シェアされたコンテンツをアップデートしました"
|
||||
},
|
||||
"app.action-bar.installs": {
|
||||
"message": "インストール数"
|
||||
},
|
||||
@@ -141,19 +144,19 @@
|
||||
"message": "プライバシーと広告がModrinthを支える仕組み"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "ぼかし効果などの高度なレンダリングを有効にします。グラフィックアクセラレーションが使用できない場合は、パフォーマンスが低下する可能性があります。"
|
||||
"message": "背景のぼかしなどの視覚効果を有効にします。ハードウェアアクセラレーションが無効の場合、パフォーマンスが低下する可能性があります。"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "高度なレンダリング"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Modrinth Appでのお好みのテーマを選択してください。"
|
||||
"message": "Modrinth Appのテーマを選びましょう。"
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "テーマ"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "ランチャー起動時に表示するページを変更します。"
|
||||
"message": "Modrinth Appを開いたときに表示するページを選択します。"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "ホーム"
|
||||
@@ -165,49 +168,49 @@
|
||||
"message": "デフォルトの起動ページ"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "スキンページでプレイヤー上部のネームタグを非表示にします。"
|
||||
"message": "スキン選択画面のプレイヤープレビュー上にあるユーザー名を非表示にします。"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "ネームタグを非表示にする"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "ホームページの「ジャンプバック」セクションには、最近追加されたワールドが含まれています。"
|
||||
"message": "ホーム画面の「Jump back in」セクションに、最近プレイしたワールドを表示します。"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "最近のワールドを表示"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Minecraftが起動した時、ランチャーを最小化します。"
|
||||
"message": "Minecraftを起動したときにランチャーを最小化します。"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "ランチャーを最小化"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "OsのウィンドウUIを使用します(アプリの再起動が必要です)。"
|
||||
"message": "OS標準のタイトルバーとウィンドウ操作ボタンを使用します。反映にはアプリの再起動が必要です。"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "OSのウィンドウUIを使用"
|
||||
"message": "システムウィンドウフレーム"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "インスタンスのプレイ時間を表示します。"
|
||||
"message": "各インスタンスのプレイ時間を表示します。"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "プレイ時間を表示"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Modパックの重複インストール、通常のコンテンツ削除、一括更新、Modパックのリンク解除、修復の促しなど、リスクの低い確認画面は自動的にスキップされます。危険な警告は引き続き表示されます。"
|
||||
"message": "重複インストール、通常コンテンツの削除、一括アップデート、連携解除、修復といった低リスクな操作の確認ダイアログをスキップします。危険な操作に関する警告は常に表示されます。"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "重要でない警告をスキップ"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "サイドバーの表示/非表示を切り替える機能を有効にします。"
|
||||
"message": "右サイドバーをデフォルトで非表示にし、表示/非表示を切り替えるボタンを追加します。"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "サイドバーの表示切替を有効化"
|
||||
"message": "右のサイドバーを隠す"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Modrinthで配布されていないModrinth Pack(.mrpack)をインストールする場合、事前にリスクについて警告します。"
|
||||
"message": "Modrinth以外でホストされているModrinthパック(.mrpack)をインストールする前に、安全警告を表示します。"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "不明なModパックのインストール前に警告する"
|
||||
@@ -218,6 +221,15 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "認証サーバーにアクセスできません"
|
||||
},
|
||||
"app.behavior-settings.confirmations.title": {
|
||||
"message": "操作の確認"
|
||||
},
|
||||
"app.behavior-settings.content.title": {
|
||||
"message": "ホームとコンテンツ"
|
||||
},
|
||||
"app.behavior-settings.startup-and-navigation.title": {
|
||||
"message": "起動とナビゲーション"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "インスタンスにサーバーを追加中"
|
||||
},
|
||||
@@ -239,12 +251,18 @@
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "インスタンスに戻る"
|
||||
},
|
||||
"app.browse.discover-project-type": {
|
||||
"message": "{projectType}を検索"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "サーバーを探す"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "既に追加済みのサーバーを非表示にする"
|
||||
},
|
||||
"app.browse.hide-installed-modpacks": {
|
||||
"message": "インストール済みを非表示"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modパック"
|
||||
},
|
||||
@@ -335,6 +353,9 @@
|
||||
"app.instance.admonitions.shared-instance.added-label": {
|
||||
"message": "追加済"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.changes-body": {
|
||||
"message": "ローカルインスタンスのバージョンが、共有しているユーザー側のバージョンより進んでいます。"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.changes-header": {
|
||||
"message": "変更はまだ共有されていません"
|
||||
},
|
||||
@@ -344,12 +365,30 @@
|
||||
"app.instance.admonitions.shared-instance.publishing-button": {
|
||||
"message": "公開しています…"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.removed-label": {
|
||||
"message": "削除されました"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-admonition-header": {
|
||||
"message": "アップデートを公開する"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-description": {
|
||||
"message": "このインスタンスを利用しているすべてのユーザーに共有されるコンテンツの変更内容を確認してください。"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-header": {
|
||||
"message": "変更点を確認"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-update-button": {
|
||||
"message": "アップデート内容を確認"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.reviewing-button": {
|
||||
"message": "審査中…"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-body": {
|
||||
"message": "{name}をプレイするにはアップデートが必要です。ゲームを起動するには最新バージョンにアップデートしてください。"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-header": {
|
||||
"message": "アップデートが利用可能です"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "インスタンス内のすべてのデータは、ワールド、設定、インストール済みのコンテンツを含め、完全に削除されます。"
|
||||
},
|
||||
@@ -416,6 +455,9 @@
|
||||
"app.instance.share.invite-modal.heading": {
|
||||
"message": "{name} をシェアする"
|
||||
},
|
||||
"app.instance.share.invite-modal.user-limit-reached": {
|
||||
"message": "このインスタンスは上限の{limit}人に達しました。"
|
||||
},
|
||||
"app.instance.share.locked.empty-description-prefix": {
|
||||
"message": "このページにアクセスするには"
|
||||
},
|
||||
@@ -434,9 +476,18 @@
|
||||
"app.instance.share.locked.wrong-account-heading": {
|
||||
"message": "アカウントが違います"
|
||||
},
|
||||
"app.instance.share.members.empty": {
|
||||
"message": "まだ誰も参加していません"
|
||||
},
|
||||
"app.instance.share.members.no-filter-results": {
|
||||
"message": "フィルターに一致するユーザーが見つかりません。"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-access": {
|
||||
"message": "このインスタンスのアップデートは受信できなくなります"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-installed-copy": {
|
||||
"message": "すでにインストール済みのコピーは、そのままデバイスに残ります"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-invite-again": {
|
||||
"message": "後でもう一度招待することもできます"
|
||||
},
|
||||
@@ -461,6 +512,12 @@
|
||||
"app.instance.share.sign-in.button": {
|
||||
"message": "サインイン"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.description": {
|
||||
"message": "インスタンスの共有は現在ご利用いただけません。しばらくしてからもう一度お試しください"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.heading": {
|
||||
"message": "接続エラー"
|
||||
},
|
||||
"app.instance.share.unlink.body": {
|
||||
"message": "この起動構成を共有するには、このmodpackのリンクを解除する必要があります"
|
||||
},
|
||||
@@ -482,9 +539,18 @@
|
||||
"app.instance.shared-instance-wrong-account.fallback-username": {
|
||||
"message": "リンクされたアカウント"
|
||||
},
|
||||
"app.instance.shared-instance-wrong-account.owner-admonition-body-v2": {
|
||||
"message": "インスタンスを管理することができます。サインインするまでアップデートを配信することはできません。"
|
||||
},
|
||||
"app.instance.shared-instance-wrong-account.sign-in-as-label": {
|
||||
"message": "このアカウントでサインインすることで"
|
||||
},
|
||||
"app.instance.shared-instance-wrong-account.signed-out-header": {
|
||||
"message": "Modrinthへのサインインが必要です"
|
||||
},
|
||||
"app.instance.shared-instance-wrong-account.user-admonition-body-v2": {
|
||||
"message": "インスタンスのアップデートを受け取ることができます。"
|
||||
},
|
||||
"app.instance.shared-instance-wrong-account.warning-header": {
|
||||
"message": "Modrinthのアカウントが間違っています"
|
||||
},
|
||||
@@ -524,6 +590,9 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "サーバー、ワールドは追加されていません"
|
||||
},
|
||||
"app.instance.worlds.refreshing": {
|
||||
"message": "更新中…"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "サーバーを削除"
|
||||
},
|
||||
@@ -539,12 +608,60 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "{count} 個のワールドを検索…"
|
||||
},
|
||||
"app.java-detection.cancel": {
|
||||
"message": "キャンセル"
|
||||
},
|
||||
"app.java-detection.columns.actions": {
|
||||
"message": "アクション"
|
||||
},
|
||||
"app.java-detection.columns.path": {
|
||||
"message": "Javaの場所"
|
||||
},
|
||||
"app.java-detection.columns.version": {
|
||||
"message": "バージョン"
|
||||
},
|
||||
"app.java-detection.no-installations-found": {
|
||||
"message": "インストールされたJavaが見つかりません。"
|
||||
},
|
||||
"app.java-detection.select": {
|
||||
"message": "選択"
|
||||
},
|
||||
"app.java-detection.selected": {
|
||||
"message": "選択済み"
|
||||
},
|
||||
"app.java-detection.title": {
|
||||
"message": "使用するJavaを選んでください"
|
||||
},
|
||||
"app.java-selector.already-installed": {
|
||||
"message": "インストール済み"
|
||||
},
|
||||
"app.java-selector.browse": {
|
||||
"message": "探す"
|
||||
},
|
||||
"app.java-selector.detect": {
|
||||
"message": "検出"
|
||||
},
|
||||
"app.java-selector.install-recommended": {
|
||||
"message": "推奨をインストール"
|
||||
},
|
||||
"app.java-selector.installing": {
|
||||
"message": "インストール中…"
|
||||
},
|
||||
"app.java-selector.path.placeholder": {
|
||||
"message": "/path/to/java"
|
||||
},
|
||||
"app.java-selector.test-installation": {
|
||||
"message": "Javaのインストールをテスト"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context": {
|
||||
"message": "追加のコンテンツ"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context-placeholder": {
|
||||
"message": "可能であれば、リンクや画像も含めてください"
|
||||
},
|
||||
"app.modal.install-to-play.block-user": {
|
||||
"message": "ユーザーをブロック"
|
||||
},
|
||||
"app.modal.install-to-play.content-you-are-reporting": {
|
||||
"message": "起動構成を報告する"
|
||||
},
|
||||
@@ -566,6 +683,9 @@
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "この招待は他のModrinthユーザーによって作成されたものであり、Modrinth公式のものではありません。信頼できる人からの招待のみ承諾してください。"
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning-with-creator": {
|
||||
"message": "この招待はModrinthではなく<creator>{username}</creator>によって作成されました。信頼できる人物からの招待のみ受諾してください。"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, other {#個のMod}}"
|
||||
},
|
||||
@@ -578,6 +698,9 @@
|
||||
"app.modal.install-to-play.report-image-too-large": {
|
||||
"message": "ファイルのサイズが 1 MiBの制限を超えています"
|
||||
},
|
||||
"app.modal.install-to-play.report-legal-claims": {
|
||||
"message": "DMCA通知やその他の法的請求については、弊社の<copyright-link>著作権ポリシー</copyright-link>をご覧ください。"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason": {
|
||||
"message": "この起動構成はどの規則に違反していますか?"
|
||||
},
|
||||
@@ -620,6 +743,9 @@
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "認識されないファイル"
|
||||
},
|
||||
"app.modal.install-to-play.user-blocked": {
|
||||
"message": "ユーザーをブロックしました"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "コンテンツを見る"
|
||||
},
|
||||
@@ -647,6 +773,36 @@
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "{name}をプレイするにはアップデートが必要です。ゲームを起動するには最新バージョンにアップデートしてください。"
|
||||
},
|
||||
"app.nav.create-new-instance": {
|
||||
"message": "新しいインスタンスを作成"
|
||||
},
|
||||
"app.nav.home": {
|
||||
"message": "ホーム"
|
||||
},
|
||||
"app.nav.library": {
|
||||
"message": "ライブラリ"
|
||||
},
|
||||
"app.nav.modrinth-account": {
|
||||
"message": "Modrinthアカウント"
|
||||
},
|
||||
"app.nav.modrinth-hosting": {
|
||||
"message": "Modrinth Hosting"
|
||||
},
|
||||
"app.nav.sign-in-to-modrinth-account": {
|
||||
"message": "Modrinthアカウントにサインイン"
|
||||
},
|
||||
"app.nav.signed-in-as": {
|
||||
"message": "<user>{username}</user>としてサインイン中"
|
||||
},
|
||||
"app.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Modrinth+にアップグレード"
|
||||
},
|
||||
"app.news.title": {
|
||||
"message": "ニュース"
|
||||
},
|
||||
"app.news.view-all": {
|
||||
"message": "全てのニュースを見る"
|
||||
},
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "このプロジェクトは既にインストールされています"
|
||||
},
|
||||
@@ -656,6 +812,9 @@
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "ディスカバーに戻る"
|
||||
},
|
||||
"app.project.install-context.back-to-instance": {
|
||||
"message": "インスタンスに戻る"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "すべてのバージョン"
|
||||
},
|
||||
@@ -668,20 +827,188 @@
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "既にインストールされています"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-show-tooltip": {
|
||||
"message": "ドラッグして最近のインスタンスを表示"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-tooltip": {
|
||||
"message": "ドラッグしてサイズ変更"
|
||||
},
|
||||
"app.restarting": {
|
||||
"message": "再起動中..."
|
||||
},
|
||||
"app.settings.app-version": {
|
||||
"message": "Modrinth App {version}"
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.description": {
|
||||
"message": "インスタンス起動時に設定される環境変数"
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.placeholder": {
|
||||
"message": "環境変数を入力..."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.title": {
|
||||
"message": "環境変数"
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.description": {
|
||||
"message": "options.txt ファイルを更新し、インスタンスをフルスクリーンで起動します。"
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.title": {
|
||||
"message": "全画面"
|
||||
},
|
||||
"app.settings.default-instance-options.height.description": {
|
||||
"message": "起動時のゲームウィンドウの高さ"
|
||||
},
|
||||
"app.settings.default-instance-options.height.placeholder": {
|
||||
"message": "高さを入力..."
|
||||
},
|
||||
"app.settings.default-instance-options.height.title": {
|
||||
"message": "高さ"
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.description": {
|
||||
"message": "インスタンス起動時にJavaへ渡される引数"
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.placeholder": {
|
||||
"message": "Java引数を入力..."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.title": {
|
||||
"message": "Java引数"
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.description": {
|
||||
"message": "各インスタンスに割り当てる最大メモリ容量"
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.title": {
|
||||
"message": "メモリ割り当て"
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.description": {
|
||||
"message": "ゲーム終了後に実行"
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.placeholder": {
|
||||
"message": "終了後コマンドを入力..."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.title": {
|
||||
"message": "終了後フック"
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.description": {
|
||||
"message": "インスタンス起動前に実行"
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.placeholder": {
|
||||
"message": "起動前コマンドを入力..."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.title": {
|
||||
"message": "起動前フック"
|
||||
},
|
||||
"app.settings.default-instance-options.width.description": {
|
||||
"message": "起動時のゲームウィンドウの幅"
|
||||
},
|
||||
"app.settings.default-instance-options.width.placeholder": {
|
||||
"message": "幅を入力..."
|
||||
},
|
||||
"app.settings.default-instance-options.width.title": {
|
||||
"message": "幅"
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.description": {
|
||||
"message": "Minecraftの起動プロセスをラップするためのコマンド"
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.placeholder": {
|
||||
"message": "ラッパーコマンドを入力..."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.title": {
|
||||
"message": "ラッパーフック"
|
||||
},
|
||||
"app.settings.developer-mode-button.label": {
|
||||
"message": "開発者モードの切り替え"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "開発者モードがオンになっています。"
|
||||
},
|
||||
"app.settings.downloading": {
|
||||
"message": "v{version}をダウンロード中"
|
||||
},
|
||||
"app.settings.java-installations.location.title": {
|
||||
"message": "Java {version, number} の場所"
|
||||
},
|
||||
"app.settings.operating-system.macos": {
|
||||
"message": "MacOS"
|
||||
},
|
||||
"app.settings.privacy.ads-consent.intro": {
|
||||
"message": "Modrinthは広告収益によって運営され、クリエイターへの報酬も広告収益から支払われています。当社のパートナーは、広告のパーソナライズや効果測定のために、アプリ内でCookieを保存・利用する場合があります。この機能は下のボタンから個別に拒否や許可または変更することができます。"
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.description": {
|
||||
"message": "Discordの現在のプレイ中に Modrinth App を表示します。これはModによってインスタンスに追加されるRich Presenceには影響しません。適用にはアプリの再起動が必要です。"
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.title": {
|
||||
"message": "Discord Rich Presence"
|
||||
},
|
||||
"app.settings.privacy.telemetry.description": {
|
||||
"message": "Modrinthはユーザー体験の向上および最適化のために、匿名化されたアナリティクスと利用データを収集しています。このオプションをオフにすることで無効化(オプトアウト)され、以降データの収集は行われません。"
|
||||
},
|
||||
"app.settings.privacy.telemetry.title": {
|
||||
"message": "テレメトリ"
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.description": {
|
||||
"message": "インストールの保留中または実行中に「詳細をコピー」アクションを表示します。失敗または中断されたインストールでは常に利用可能です。"
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.title": {
|
||||
"message": "「詳細をコピー」を常に表示"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.description": {
|
||||
"message": "キャッシュが再構築されるまで、アプリの読み込みが遅くなる場合があります。"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.title": {
|
||||
"message": "アプリのキャッシュを破棄しますか?"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.description": {
|
||||
"message": "キャッシュデータを消去し、Modrinthから再ダウンロードします。キャッシュが再構築されるまで、アプリの読み込みが遅くなる場合があります。"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.purge": {
|
||||
"message": "キャッシュを破棄"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.title": {
|
||||
"message": "アプリのキャッシュ"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.description": {
|
||||
"message": "万が一の復旧に備え、重要なアプリデータのバックアップがここに保存されます。"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.open-folder": {
|
||||
"message": "バックアップフォルダーを開く"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.title": {
|
||||
"message": "アプリデータベースのバックアップ"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.browse": {
|
||||
"message": "アプリのディレクトリを参照..."
|
||||
},
|
||||
"app.settings.resource-management.app-directory.description": {
|
||||
"message": "Modrinth Appがインスタンスやその他のファイルを保存する場所です。変更はアプリの再起動後に反映されます。"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.select": {
|
||||
"message": "新しいアプリディレクトリを選択"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.title": {
|
||||
"message": "アプリのディレクトリ"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.description": {
|
||||
"message": "アプリが同時にダウンロードできるファイル数です。回線が不安定な場合は数値を下げてください。適用にはアプリの再起動が必要です。"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.title": {
|
||||
"message": "最大同時ダウンロード数"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.description": {
|
||||
"message": "アプリが同時にディスクへ書き込めるファイル数です。I/Oエラーが頻発する場合は数値を下げてください。適用にはアプリの再起動が必要です。"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.title": {
|
||||
"message": "最大同時書き込み数"
|
||||
},
|
||||
"app.settings.sidebar.label.instances": {
|
||||
"message": "インスタンス"
|
||||
},
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "表示設定"
|
||||
},
|
||||
"app.settings.tabs.behavior": {
|
||||
"message": "動作"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "インスタンスの基本設定"
|
||||
"message": "デフォルトのゲーム設定"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Javaのインストール設定"
|
||||
@@ -695,6 +1022,9 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "リソース管理"
|
||||
},
|
||||
"app.sidebar.playing-as": {
|
||||
"message": "プレイ中のアカウント"
|
||||
},
|
||||
"app.skins.add-button": {
|
||||
"message": "スキンを追加"
|
||||
},
|
||||
@@ -854,6 +1184,21 @@
|
||||
"app.skins.toggle-ears-features-on": {
|
||||
"message": "オンに切り替え"
|
||||
},
|
||||
"app.survey.body": {
|
||||
"message": "Modrinth App の使用感についての簡単なアンケートにご協力いただけますか?"
|
||||
},
|
||||
"app.survey.footer": {
|
||||
"message": "このフィードバックはModrinthチームに直接届けられ、今後のアップデートの改善に役立てられます!"
|
||||
},
|
||||
"app.survey.no-thanks": {
|
||||
"message": "結構です"
|
||||
},
|
||||
"app.survey.take-survey": {
|
||||
"message": "アンケートに回答"
|
||||
},
|
||||
"app.survey.title": {
|
||||
"message": "Modrinthユーザーのみなさん、こんにちは!"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} のダウンロードが完了しました。今すぐ更新するには再読み込みするか、Modrinth Appを閉じる際に自動更新されます。"
|
||||
},
|
||||
@@ -884,6 +1229,9 @@
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "バージョン {version} が正常にインストールされました!"
|
||||
},
|
||||
"app.user.project.install-to-instance": {
|
||||
"message": "インスタンスにインストール"
|
||||
},
|
||||
"app.world.server-modal.placeholder-address": {
|
||||
"message": "example.modrinth.gg"
|
||||
},
|
||||
@@ -929,6 +1277,9 @@
|
||||
"content.shared-instance.disable-single-body": {
|
||||
"message": "無効化はローカルコピーにのみ影響します。今後共有された起動構成がアップデートされた際に、再び有効化されたり、元の状態に戻ったり、変更されたりする場合があります。"
|
||||
},
|
||||
"content.shared-instance.unlink-body": {
|
||||
"message": "リンク解除はローカルのコピーにのみ適用されます。将来的に共有インスタンスが更新されると、復元や変更が再度行われる可能性があります。"
|
||||
},
|
||||
"content.shared-instance.warning-header": {
|
||||
"message": "これは共有された起動構成の一部です"
|
||||
},
|
||||
@@ -1004,12 +1355,39 @@
|
||||
"installation-settings.shared-instance.unlink-button": {
|
||||
"message": "起動構成の共有を解除"
|
||||
},
|
||||
"installation-settings.shared-instance.unlink-description": {
|
||||
"message": "このローカルインスタンスを今後の共有アップデートから切断します。"
|
||||
},
|
||||
"installation-settings.shared-instance.unlinking-button": {
|
||||
"message": "共有を解除中…"
|
||||
},
|
||||
"installation-settings.shared-instance.unpublish-button": {
|
||||
"message": "共有された軌道構成を非公開にする"
|
||||
},
|
||||
"installation-settings.shared-instance.unpublish-description": {
|
||||
"message": "この共有インスタンスをModrinthから削除し、使用者へのアップデート送信を停止します。ローカルのインスタンスには影響しません。"
|
||||
},
|
||||
"installation-settings.shared-instance.unpublishing-button": {
|
||||
"message": "非公開に設定中..."
|
||||
},
|
||||
"installation-settings.unlink-shared-instance.modal.admonition-body": {
|
||||
"message": "これはローカルのインスタンスにのみ影響します。インストール済みのコンテンツはこのデバイスに残り、共有インスタンスやそれを使用している他のユーザーには影響しません。"
|
||||
},
|
||||
"installation-settings.unlink-shared-instance.modal.admonition-header": {
|
||||
"message": "共有インスタンスのリンク解除"
|
||||
},
|
||||
"installation-settings.unlink-shared-instance.modal.header": {
|
||||
"message": "共有インスタンスのリンクを解除"
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.admonition-body": {
|
||||
"message": "Modrinthのサーバーからこの共有インスタンスを削除します。Modrinthアプリでこれを使用しているユーザーへのアップデート配信は停止しますが、ローカルのインスタンスとそのコンテンツはこのデバイスに残ります。"
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.admonition-header": {
|
||||
"message": "共有インスタンスの非公開化"
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.header": {
|
||||
"message": "共有インスタンスを非公開にする"
|
||||
},
|
||||
"instance.action.create-shortcut": {
|
||||
"message": "ショートカット作成"
|
||||
},
|
||||
@@ -1079,6 +1457,12 @@
|
||||
"instance.files.save-as": {
|
||||
"message": "名前をつけて保存…"
|
||||
},
|
||||
"instance.locked.delete-button": {
|
||||
"message": "インスタンスを削除"
|
||||
},
|
||||
"instance.locked.play-tooltip": {
|
||||
"message": "このインスタンスはロックされています"
|
||||
},
|
||||
"instance.playtime.never-played": {
|
||||
"message": "未プレイ"
|
||||
},
|
||||
@@ -1094,6 +1478,45 @@
|
||||
"instance.server-modal.resource-pack": {
|
||||
"message": "リソースパック"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.actions": {
|
||||
"message": "アクション"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.code": {
|
||||
"message": "招待リンク"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.description": {
|
||||
"message": "アクティブな招待リンクをお持ちの方なら誰でも参加できます。"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.empty": {
|
||||
"message": "有効な招待はありません。"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.expires": {
|
||||
"message": "有効期限"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke": {
|
||||
"message": "招待を取り消す"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke-with-code": {
|
||||
"message": "招待コード {code} を取り消す"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.title": {
|
||||
"message": "有効な招待"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.uses": {
|
||||
"message": "ユーザー"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-body": {
|
||||
"message": "招待リンク <monospace>{code}</monospace> は即座に無効化されます。すでに参加しているユーザーのアクセス権はそのまま保持されます。"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-header": {
|
||||
"message": "この操作は取り消せません"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.confirm": {
|
||||
"message": "招待を取り消す"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.header": {
|
||||
"message": "招待を取り消す"
|
||||
},
|
||||
"instance.settings.tabs.general": {
|
||||
"message": "一般"
|
||||
},
|
||||
@@ -1202,6 +1625,27 @@
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "ゲーム起動フック"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.description": {
|
||||
"message": "フックはインスタンスのカレントディレクトリで実行され、以下の環境変数が利用可能です:"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-dir.description": {
|
||||
"message": "$INST_DIR: インスタンスのフォルダへの絶対パス"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-id.description": {
|
||||
"message": "$INST_ID: インスタンスのフォルダ名"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java-args.description": {
|
||||
"message": "$INST_JAVA_ARGS: ゲームに渡されるJVM引数"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java.description": {
|
||||
"message": "$INST_JAVA: Javaの実行ファイルへの絶対パス"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-mc-dir.description": {
|
||||
"message": "$INST_MC_DIR:$INST_DIR のエイリアス"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-name.description": {
|
||||
"message": "$INST_NAME: インスタンスの名前"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper": {
|
||||
"message": "ラッパー"
|
||||
},
|
||||
@@ -1217,6 +1661,9 @@
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader}のバージョン"
|
||||
},
|
||||
"instance.settings.tabs.installation.locked": {
|
||||
"message": "このインスタンスがロックされている間は、インストール設定を利用できません。"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Javaとメモリ"
|
||||
},
|
||||
@@ -1256,6 +1703,9 @@
|
||||
"instance.settings.tabs.java.java-path-placeholder": {
|
||||
"message": "/path/to/java"
|
||||
},
|
||||
"instance.settings.tabs.sharing": {
|
||||
"message": "共有設定"
|
||||
},
|
||||
"instance.settings.tabs.window": {
|
||||
"message": "ウィンドウ"
|
||||
},
|
||||
@@ -1286,9 +1736,63 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "幅を入力…"
|
||||
},
|
||||
"instance.shared-instance.error.title": {
|
||||
"message": "問題が発生しました"
|
||||
},
|
||||
"instance.shared-instance.network-error.text": {
|
||||
"message": "共有インスタンス API に接続できません"
|
||||
},
|
||||
"instance.shared-instance.network-error.title": {
|
||||
"message": "ネットワークエラー"
|
||||
},
|
||||
"instance.shared-instance.owner-tooltip": {
|
||||
"message": "このインスタンスの内容は他のユーザーに共有されています。"
|
||||
},
|
||||
"instance.shared-instance.publish-review.added-label": {
|
||||
"message": "追加しました"
|
||||
},
|
||||
"instance.shared-instance.publish-review.admonition-header": {
|
||||
"message": "アップデートを配信する"
|
||||
},
|
||||
"instance.shared-instance.publish-review.config-title-v2": {
|
||||
"message": "設定ファイルを選択"
|
||||
},
|
||||
"instance.shared-instance.publish-review.description": {
|
||||
"message": "変更内容を確認し、この更新に含める設定ファイルを選択してください。"
|
||||
},
|
||||
"instance.shared-instance.publish-review.header": {
|
||||
"message": "変更内容を確認"
|
||||
},
|
||||
"instance.shared-instance.publish-review.publish-button": {
|
||||
"message": "アップデートをプッシュ"
|
||||
},
|
||||
"instance.shared-instance.publish-review.removed-label": {
|
||||
"message": "削除しました"
|
||||
},
|
||||
"instance.shared-instance.tooltip": {
|
||||
"message": "このインスタンスの内容は他のユーザーによって管理されています。"
|
||||
},
|
||||
"instance.shared-instance.unavailable.access-revoked-text": {
|
||||
"message": "共有インスタンスへのアクセス権が取り消されました。このインスタンスは引き続き利用可能ですが、リンクは解除され、今後のアップデートは受信されなくなります。"
|
||||
},
|
||||
"instance.shared-instance.unavailable.deleted-text": {
|
||||
"message": "プライマリインスタンスが削除されました。このインスタンスは引き続き利用可能ですが、リンクは解除され、今後のアップデートは受信されなくなります。"
|
||||
},
|
||||
"instance.shared-instance.unavailable.locked-text": {
|
||||
"message": "この共有インスタンスはコンテンツモデレーションチームによってロックされました。プライマリインスタンスからのアップデートの受信は停止し、プレイすることもできません。"
|
||||
},
|
||||
"instance.shared-instance.unavailable.locked-title": {
|
||||
"message": "インスタンスがロックされています"
|
||||
},
|
||||
"instance.shared-instance.unavailable.manager-fallback": {
|
||||
"message": "インスタンスマネージャー"
|
||||
},
|
||||
"instance.shared-instance.unavailable.text": {
|
||||
"message": "ローカルインスタンスは引き続き利用可能ですが、リンクは解除されており、今後のアップデートは受信されません。"
|
||||
},
|
||||
"instance.shared-instance.unavailable.title": {
|
||||
"message": "共有インスタンスは利用できなくなりました"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Minecraftサーバー"
|
||||
},
|
||||
@@ -1376,9 +1880,6 @@
|
||||
"modal.modrinth-account-required.browser-description": {
|
||||
"message": "サインイン用のタブが開きました。そちらでサインインを完了してから、アプリに戻ってください。"
|
||||
},
|
||||
"modal.modrinth-account-required.cancel-button": {
|
||||
"message": "キャンセル"
|
||||
},
|
||||
"modal.modrinth-account-required.continue-in-browser-heading": {
|
||||
"message": "ブラウザで続行"
|
||||
},
|
||||
@@ -1432,5 +1933,11 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "ローダーはサーバーによる条件です"
|
||||
},
|
||||
"settings.sidebar.label.account": {
|
||||
"message": "アカウント"
|
||||
},
|
||||
"settings.sidebar.label.display": {
|
||||
"message": "ディスプレイ"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
"message": "실행 중인 인스턴스 보이기"
|
||||
},
|
||||
"app.action-bar.stop-instance": {
|
||||
"message": "인스턴스 멈추기"
|
||||
"message": "인스턴스 중지"
|
||||
},
|
||||
"app.action-bar.update": {
|
||||
"message": "업데이트"
|
||||
@@ -132,7 +132,7 @@
|
||||
"message": "모두 수락"
|
||||
},
|
||||
"app.ads-consent.body": {
|
||||
"message": "광고는 Modrinth가 운영될 수 있도록 하며, 크리에이터에게 지급되는 보상을 지원합니다. 우리의 파트너는 앱에서 광고를 개인화하고 성과를 측정하기 위해 쿠키를 저장하거나 접근할 수 있습니다."
|
||||
"message": "광고는 Modrinth가 운영될 수 있도록 하며, 크리에이터에게 지급되는 보상을 지원합니다. 우리의 파트너는 앱에서 광고를 개인 맞춤으로 제공하고 성과를 측정하기 위해 쿠키를 저장하거나 접근할 수 있습니다."
|
||||
},
|
||||
"app.ads-consent.manage": {
|
||||
"message": "환경 설정 관리"
|
||||
@@ -144,19 +144,19 @@
|
||||
"message": "개인정보와 광고가 Modrinth를 지원하는 방식"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "블러 효과와 같은 고급 렌더링 기능을 활성화합니다. 하드웨어 가속 없이는 성능 저하가 발생할 수 있습니다."
|
||||
"message": "배경 흐림 효과와 같은 시각 효과를 활성화합니다. 하드웨어 가속이 지원되지 않는 경우 성능이 저하될 수 있습니다."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "고급 렌더링"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Modrinth App에서 선호하는 색상 테마를 선택합니다."
|
||||
"message": "Modrinth 앱에서 사용할 색상 테마를 선택하세요."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "색상 테마"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "런처의 기본 시작 화면을 변경합니다."
|
||||
"message": "Modrinth 앱이 실행될 때 표시될 페이지를 선택하세요."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "홈"
|
||||
@@ -168,49 +168,49 @@
|
||||
"message": "기본 시작 화면"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "스킨 화면에서 플레이어 위에 있는 이름표를 비활성화합니다."
|
||||
"message": "스킨 페이지의 플레이어 미리보기 위에 있는 사용자 이름을 숨깁니다."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "이름표 숨기기"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "홈 화면의 \"바로 입장\" 부분에 최근 플레이한 월드를 표시합니다."
|
||||
"message": "홈페이지의 \"다시 시작하기\" 구역에 최근 플레이한 월드를 표시합니다."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "세계로 바로 입장"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "마인크래프트 실행 시 런처를 최소화합니다."
|
||||
"message": "마인크래프트가 시작되면 Modrinth 앱을 최소화 합니다."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "런처 최소화"
|
||||
"message": "앱 최소화"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "시스템 창 테두리 (앱 재시작 필요)."
|
||||
"message": "운영 체제의 제목 표시줄 및 창 제어 기능을 사용합니다. 앱 재시작이 필요합니다."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "네이티브 제목 표시줄"
|
||||
"message": "시스템 창 프레임"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "인스턴스의 플레이 시간을 표시합니다."
|
||||
"message": "각 인스턴스를 얼마나 플레이했는지 표시합니다."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "플레이 시간 표시"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "중복되는 모드팩 설치와 일반적인 콘텐츠 삭제, 동시 업데이트, 모드팩 링크 제거, 프롬프트 복구처럼 리스크가 적은 행위에 대한 확인 절차를 자동으로 넘깁니다. 위험한 경고는 여전히 표시됩니다."
|
||||
"message": "중복 설치, 일반 콘텐츠 삭제, 일괄 업데이트, 연동 해제, 복구 등 위험도가 낮은 작업의 확인 절차를 건너뜁니다. 위험한 작업에 대한 경고는 항상 표시됩니다."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "중요하지 않은 경고 넘기기"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "사이드바를 접거나 펼칠 수 있는 기능을 활성화합니다."
|
||||
"message": "기본 상태에서 오른쪽 사이드바를 숨기고, 이를 표시하거나 숨기는 버튼을 추가합니다."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "사이드바 토글"
|
||||
"message": "오른쪽 사이드바 숨기기"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Modrinth 외부에서 가져온 모드팩 파일(.mrpack)을 설치할 때, 사용자가 위험성을 인지할 수 있도록 경고를 표시합니다."
|
||||
"message": "Modrinth에 호스팅되지 않은 Modrinth Pack(.mrpack)을 설치하기 전에 안전 경고를 표시합니다."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "출처를 알 수 없는 모드팩 설치 전 경고"
|
||||
@@ -221,6 +221,15 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "인증 서버에 연결할 수 없습니다"
|
||||
},
|
||||
"app.behavior-settings.confirmations.title": {
|
||||
"message": "확인 알림"
|
||||
},
|
||||
"app.behavior-settings.content.title": {
|
||||
"message": "홈 및 콘텐츠"
|
||||
},
|
||||
"app.behavior-settings.startup-and-navigation.title": {
|
||||
"message": "시작 및 탐색"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "인스턴스에 서버 추가"
|
||||
},
|
||||
@@ -242,12 +251,18 @@
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "인스턴스로 돌아가기"
|
||||
},
|
||||
"app.browse.discover-project-type": {
|
||||
"message": "{projectType} 둘러보기"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "서버 탐색하기"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "이미 추가한 서버 숨기기"
|
||||
},
|
||||
"app.browse.hide-installed-modpacks": {
|
||||
"message": "이미 설치된 항목 숨기기"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "모드팩"
|
||||
},
|
||||
@@ -362,9 +377,18 @@
|
||||
"app.instance.admonitions.shared-instance.review-header": {
|
||||
"message": "Review changes"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-update-button": {
|
||||
"message": "업데이트 검토"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.reviewing-button": {
|
||||
"message": "검토중..."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-body": {
|
||||
"message": "{name} 플레이를 위해 업데이트가 필요합니다. 게임을 실행하려면 최신 버전 업데이트를 진행하세요."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-header": {
|
||||
"message": "업데이트가 있습니다"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "인스턴스의 모든 데이터가 삭제됩니다. 세계 폴더, 설정 폴더 등 설치된 모든 컨텐츠가 포함됩니다."
|
||||
},
|
||||
@@ -431,6 +455,9 @@
|
||||
"app.instance.share.invite-modal.heading": {
|
||||
"message": "{name} 공유"
|
||||
},
|
||||
"app.instance.share.invite-modal.user-limit-reached": {
|
||||
"message": "이 인스턴스는 {limit}명 사용자 제한에 도달했습니다."
|
||||
},
|
||||
"app.instance.share.locked.empty-description-prefix": {
|
||||
"message": "이 페이지에 접근하려면"
|
||||
},
|
||||
@@ -449,6 +476,12 @@
|
||||
"app.instance.share.locked.wrong-account-heading": {
|
||||
"message": "잘못된 계정"
|
||||
},
|
||||
"app.instance.share.members.empty": {
|
||||
"message": "아직 참여한 사용자가 없습니다"
|
||||
},
|
||||
"app.instance.share.members.no-filter-results": {
|
||||
"message": "필터에 일치하는 사용자가 없습니다."
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-access": {
|
||||
"message": "이들은 더 이상 해당 공유 인스턴스의 업데이트를 받지 않습니다"
|
||||
},
|
||||
@@ -479,6 +512,12 @@
|
||||
"app.instance.share.sign-in.button": {
|
||||
"message": "로그인"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.description": {
|
||||
"message": "현재 공유 인스턴스 서비스를 이용할 수 없습니다. 잠시 후 다시 시도해 주세요"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.heading": {
|
||||
"message": "연결할 수 없습니다"
|
||||
},
|
||||
"app.instance.share.unlink.body": {
|
||||
"message": "인스턴스를 공유하려면 이 모드팩 연동을 해제해야 합니다"
|
||||
},
|
||||
@@ -566,12 +605,60 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "{count}개의 세계 검색..."
|
||||
},
|
||||
"app.java-detection.cancel": {
|
||||
"message": "취소"
|
||||
},
|
||||
"app.java-detection.columns.actions": {
|
||||
"message": "작업"
|
||||
},
|
||||
"app.java-detection.columns.path": {
|
||||
"message": "경로"
|
||||
},
|
||||
"app.java-detection.columns.version": {
|
||||
"message": "버전"
|
||||
},
|
||||
"app.java-detection.no-installations-found": {
|
||||
"message": "설치된 자바를 찾을수 없습니다."
|
||||
},
|
||||
"app.java-detection.select": {
|
||||
"message": "선택"
|
||||
},
|
||||
"app.java-detection.selected": {
|
||||
"message": "선택됨"
|
||||
},
|
||||
"app.java-detection.title": {
|
||||
"message": "Java 설치 위치 선택"
|
||||
},
|
||||
"app.java-selector.already-installed": {
|
||||
"message": "이미 설치됨"
|
||||
},
|
||||
"app.java-selector.browse": {
|
||||
"message": "찾아보기"
|
||||
},
|
||||
"app.java-selector.detect": {
|
||||
"message": "감지"
|
||||
},
|
||||
"app.java-selector.install-recommended": {
|
||||
"message": "권장 버전 설치"
|
||||
},
|
||||
"app.java-selector.installing": {
|
||||
"message": "설치 중..."
|
||||
},
|
||||
"app.java-selector.path.placeholder": {
|
||||
"message": "/path/to/java"
|
||||
},
|
||||
"app.java-selector.test-installation": {
|
||||
"message": "Java 설치 테스트"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context": {
|
||||
"message": "추가 정보"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context-placeholder": {
|
||||
"message": "관련이 있는 경우 가능하면 링크 및 이미지를 포함하세요"
|
||||
},
|
||||
"app.modal.install-to-play.block-user": {
|
||||
"message": "사용자 차단"
|
||||
},
|
||||
"app.modal.install-to-play.content-you-are-reporting": {
|
||||
"message": "신고 대상 인스턴스"
|
||||
},
|
||||
@@ -593,18 +680,57 @@
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "이 초대장은 다른 Modrinth 사용자가 생성했으며, Modrinth에서 생성하지 않았습니다. 신뢰할 수 있는 초대장만 수락하십시오."
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning-with-creator": {
|
||||
"message": "이 초대장은 Modrinth가 아닌 <creator>{username}</creator> 님이 생성했습니다. 신뢰할 수 있는 사람의 초대만 수락하세요."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {모드 #개} other {모드 #개}}"
|
||||
},
|
||||
"app.modal.install-to-play.report-description": {
|
||||
"message": "본 서식을 사용하여 당사의 <rules-link>규칙</rules-link> 또는 <terms-link>이용약관</terms-link> 위반 가능성이 있는 인스턴스를 신고하세요."
|
||||
},
|
||||
"app.modal.install-to-play.report-image-invalid-type": {
|
||||
"message": "허용되지 않는 이미지 형식의 파일입니다"
|
||||
},
|
||||
"app.modal.install-to-play.report-image-too-large": {
|
||||
"message": "파일이 1 MiB 용량 제한을 초과합니다"
|
||||
},
|
||||
"app.modal.install-to-play.report-legal-claims": {
|
||||
"message": "DMCA 통지 또는 기타 법적 청구 관련 내용은 <copyright-link>저작권 정책</copyright-link>을 참조하세요."
|
||||
},
|
||||
"app.modal.install-to-play.report-reason": {
|
||||
"message": "이 인스턴스가 위반한 규칙은 무엇인가요?"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.inappropriate": {
|
||||
"message": "부적절함"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.malicious": {
|
||||
"message": "악성/유해함"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.spam": {
|
||||
"message": "스팸"
|
||||
},
|
||||
"app.modal.install-to-play.report-shared-instance-header": {
|
||||
"message": "공유 인스턴스 신고"
|
||||
},
|
||||
"app.modal.install-to-play.report-submitted": {
|
||||
"message": "신고 제출됨"
|
||||
},
|
||||
"app.modal.install-to-play.report-support-and-bugs": {
|
||||
"message": "지원 요청은 <support-link>지원 팀</support-link> 문의를 이용해 주세요. 버그 제보는 <github-link>GitHub 이슈</github-link>를 등록하세요."
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "모든 파일은 형식(.mrpack 포함)에 무관하게 Modrinth에 게시되어야만 검수를 거칩니다."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "인스턴스 공유됨"
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance-content": {
|
||||
"message": "공유 인스턴스 콘텐츠"
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance-unknown-files-description": {
|
||||
"message": "이 공유 인스턴스에는 Modrinth에 게시되지 않은 파일이 포함되어 있습니다. 신뢰할 수 있는 출처의 파일만 설치하는 것을 강력히 권장합니다."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "이 서버의 모드팩은 Modrinth에 게시되지 않은 파일을 포함하고 있습니다. 신뢰할 수 있는 출처의 파일만 설치하는 것을 강력히 권장합니다."
|
||||
},
|
||||
@@ -614,6 +740,9 @@
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "확인되지 않은 파일"
|
||||
},
|
||||
"app.modal.install-to-play.user-blocked": {
|
||||
"message": "사용자 차단됨"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "구성 요소 보기"
|
||||
},
|
||||
@@ -623,6 +752,54 @@
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "제거됨"
|
||||
},
|
||||
"app.modal.update-to-play.server-modpack-unknown-files-description": {
|
||||
"message": "이 서버 모드팩 업데이트에는 Modrinth에 게시되지 않은 파일이 포함되어 있습니다. 신뢰할 수 있는 출처의 파일만 설치하는 것을 강력히 권장합니다."
|
||||
},
|
||||
"app.modal.update-to-play.shared-instance-added-label": {
|
||||
"message": "추가됨"
|
||||
},
|
||||
"app.modal.update-to-play.shared-instance-removed-label": {
|
||||
"message": "제거됨"
|
||||
},
|
||||
"app.modal.update-to-play.shared-instance-unknown-files-description": {
|
||||
"message": "이 공유 인스턴스 업데이트에는 Modrinth에 게시되지 않은 파일이 포함되어 있습니다. 신뢰할 수 있는 출처의 파일만 설치하는 것을 강력히 권장합니다."
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "업데이트 필요"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "{name} 플레이를 진행하려면 업데이트가 필요합니다. 게임을 실행하려면 최신 버전 업데이트를 진행하세요."
|
||||
},
|
||||
"app.nav.create-new-instance": {
|
||||
"message": "새 인스턴스 만들기"
|
||||
},
|
||||
"app.nav.home": {
|
||||
"message": "홈"
|
||||
},
|
||||
"app.nav.library": {
|
||||
"message": "라이브러리"
|
||||
},
|
||||
"app.nav.modrinth-account": {
|
||||
"message": "Modrinth 계정"
|
||||
},
|
||||
"app.nav.modrinth-hosting": {
|
||||
"message": "Modrinth 호스팅"
|
||||
},
|
||||
"app.nav.sign-in-to-modrinth-account": {
|
||||
"message": "Modrinth 계정으로 로그인"
|
||||
},
|
||||
"app.nav.signed-in-as": {
|
||||
"message": "<user>{username}</user> 으로 로그인됨"
|
||||
},
|
||||
"app.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Modrinth+ 로 업그레이드"
|
||||
},
|
||||
"app.news.title": {
|
||||
"message": "뉴스"
|
||||
},
|
||||
"app.news.view-all": {
|
||||
"message": "모든 뉴스 보기"
|
||||
},
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "이미 설치되어 있음"
|
||||
},
|
||||
@@ -632,6 +809,9 @@
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "탐색으로 돌아가기"
|
||||
},
|
||||
"app.project.install-context.back-to-instance": {
|
||||
"message": "인스턴스 복귀"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "모든 버전"
|
||||
},
|
||||
@@ -644,20 +824,188 @@
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "이미 설치됨"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-show-tooltip": {
|
||||
"message": "드래그하여 최근 인스턴스 표시"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-tooltip": {
|
||||
"message": "드래그하여 크기 조절"
|
||||
},
|
||||
"app.restarting": {
|
||||
"message": "재시작 중..."
|
||||
},
|
||||
"app.settings.app-version": {
|
||||
"message": "Modrinth 앱 {version}"
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.description": {
|
||||
"message": "인스턴스를 실행할 때 설정되는 환경 변수입니다."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.placeholder": {
|
||||
"message": "환경 변수 입력..."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.title": {
|
||||
"message": "환경 변수"
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.description": {
|
||||
"message": "options.txt 파일을 수정하여 인스턴스 실행 시 전체 화면을 사용합니다."
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.title": {
|
||||
"message": "전체 화면"
|
||||
},
|
||||
"app.settings.default-instance-options.height.description": {
|
||||
"message": "실행 시 게임 창 높이입니다."
|
||||
},
|
||||
"app.settings.default-instance-options.height.placeholder": {
|
||||
"message": "높이 입력..."
|
||||
},
|
||||
"app.settings.default-instance-options.height.title": {
|
||||
"message": "높이"
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.description": {
|
||||
"message": "인스턴스를 실행할 때 Java에 전달되는 인수입니다."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.placeholder": {
|
||||
"message": "Java 인수 입력..."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.title": {
|
||||
"message": "Java 인수"
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.description": {
|
||||
"message": "각 인스턴스가 사용할 수 있는 최대 메모리입니다."
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.title": {
|
||||
"message": "메모리 할당"
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.description": {
|
||||
"message": "게임이 종료된 후 실행됩니다."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.placeholder": {
|
||||
"message": "종료 후 명령어 입력..."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.title": {
|
||||
"message": "종료 후 스크립트"
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.description": {
|
||||
"message": "인스턴스 시작 전 실행됩니다."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.placeholder": {
|
||||
"message": "실행 전 명령어 입력..."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.title": {
|
||||
"message": "실행 전 스크립트"
|
||||
},
|
||||
"app.settings.default-instance-options.width.description": {
|
||||
"message": "실행 시 게임 창 너비입니다."
|
||||
},
|
||||
"app.settings.default-instance-options.width.placeholder": {
|
||||
"message": "너비 입력..."
|
||||
},
|
||||
"app.settings.default-instance-options.width.title": {
|
||||
"message": "너비"
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.description": {
|
||||
"message": "Minecraft 실행 프로세스를 감싸는 데 사용하는 명령어입니다."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.placeholder": {
|
||||
"message": "Wrapper 명령어 입력..."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.title": {
|
||||
"message": "Wrapper 스크립트"
|
||||
},
|
||||
"app.settings.developer-mode-button.label": {
|
||||
"message": "개발자 모드 전환"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "개발자 모드가 활성화되었습니다."
|
||||
},
|
||||
"app.settings.downloading": {
|
||||
"message": "v{version} 다운로드 중"
|
||||
},
|
||||
"app.settings.java-installations.location.title": {
|
||||
"message": "Java {version, number} 위치"
|
||||
},
|
||||
"app.settings.operating-system.macos": {
|
||||
"message": "macOS"
|
||||
},
|
||||
"app.settings.privacy.ads-consent.intro": {
|
||||
"message": "광고는 Modrinth가 운영될 수 있도록 하며, 크리에이터에게 지급되는 보상을 지원합니다. 우리의 파트너는 앱에서 광고를 개인화하고 성과를 측정하기 위해 쿠키를 저장하거나 접근할 수 있습니다. 아래에서 거부하거나 환경 설정을 관리할 수 있습니다."
|
||||
"message": "광고는 Modrinth가 운영될 수 있도록 하며, 크리에이터에게 지급되는 보상을 지원합니다. 우리의 파트너는 앱에서 광고를 개인 맞춤으로 제공하고 성과를 측정하기 위해 쿠키를 저장하거나 접근할 수 있습니다. 아래에서 거부하거나 환경 설정을 관리할 수 있습니다."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.description": {
|
||||
"message": "Discord의 현재 활동 상태에 Modrinth App을 표시합니다. 모드가 인스턴스에 추가한 Rich Presence에는 영향을 미치지 않습니다. 앱 재시작이 필요합니다."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.title": {
|
||||
"message": "Discord 활동 상태"
|
||||
},
|
||||
"app.settings.privacy.telemetry.description": {
|
||||
"message": "Modrinth는 사용자 경험 향상 및 맞춤 설정을 위해 익명화된 분석 데이터와 사용 데이터를 수집합니다. 이 옵션을 비활성화하면 데이터 수집을 거부하게 되며, 더 이상 데이터가 수집되지 않습니다."
|
||||
},
|
||||
"app.settings.privacy.telemetry.title": {
|
||||
"message": "원격 분석"
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.description": {
|
||||
"message": "설치가 대기 중이거나 진행 중일 때 '상세 정보 복사' 버튼을 표시합니다. 실패했거나 중단된 설치 건에서는 항상 사용할 수 있습니다."
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.title": {
|
||||
"message": "항상 상세 정보 복사 표시"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.description": {
|
||||
"message": "캐시가 재구축될 때까지 앱 로딩이 느려질 수 있습니다."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.title": {
|
||||
"message": "앱 캐시를 비우시겠습니까?"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.description": {
|
||||
"message": "캐시 데이터를 삭제하고 Modrinth에서 다시 다운로드합니다. 캐시가 재구축될 때까지 앱 로딩이 느려질 수 있습니다."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.purge": {
|
||||
"message": "캐시 비우기"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.title": {
|
||||
"message": "앱 캐시"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.description": {
|
||||
"message": "나중에 복구가 필요한 경우를 대비해 중요한 앱 데이터 백업을 이곳에 저장합니다."
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.open-folder": {
|
||||
"message": "백업 폴더 열기"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.title": {
|
||||
"message": "앱 데이터베이스 백업"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.browse": {
|
||||
"message": "앱 디렉터리 찾아보기"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.description": {
|
||||
"message": "Modrinth App이 인스턴스 및 기타 파일을 저장하는 위치입니다. 변경 사항은 앱을 재시작한 후 적용됩니다."
|
||||
},
|
||||
"app.settings.resource-management.app-directory.select": {
|
||||
"message": "새 앱 디렉터리 선택"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.title": {
|
||||
"message": "앱 경로"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.description": {
|
||||
"message": "앱이 한 번에 다운로드할 수 있는 파일 수입니다. 네트워크 연결이 불안정하면 이 수치를 낮추세요. 앱 재시작이 필요합니다."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.title": {
|
||||
"message": "최대 동시 다운로드 수"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.description": {
|
||||
"message": "앱이 디스크에 한 번에 쓸 수 있는 파일 수입니다. I/O 오류가 자주 발생하면 이 수치를 낮추세요. 앱 재시작이 필요합니다."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.title": {
|
||||
"message": "최대 동시 쓰기 수"
|
||||
},
|
||||
"app.settings.sidebar.label.instances": {
|
||||
"message": "인스턴스"
|
||||
},
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "모양"
|
||||
},
|
||||
"app.settings.tabs.behavior": {
|
||||
"message": "동작"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "기본 인스턴스 옵션"
|
||||
"message": "기본 게임 옵션"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Java 설치"
|
||||
@@ -671,6 +1019,9 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "리소스 관리"
|
||||
},
|
||||
"app.sidebar.playing-as": {
|
||||
"message": "플레이 중인 계정은"
|
||||
},
|
||||
"app.skins.add-button": {
|
||||
"message": "스킨 추가"
|
||||
},
|
||||
@@ -830,6 +1181,21 @@
|
||||
"app.skins.toggle-ears-features-on": {
|
||||
"message": "켜기"
|
||||
},
|
||||
"app.survey.body": {
|
||||
"message": "Modrinth 앱 이용 경험에 대한 몇 가지 질문에 답변해 주시겠습니까?"
|
||||
},
|
||||
"app.survey.footer": {
|
||||
"message": "이 피드백은 Modrinth 팀에 직접 전달되어 향후 업데이트에 반영됩니다!"
|
||||
},
|
||||
"app.survey.no-thanks": {
|
||||
"message": "괜찮습니다"
|
||||
},
|
||||
"app.survey.take-survey": {
|
||||
"message": "설문 참여하기"
|
||||
},
|
||||
"app.survey.title": {
|
||||
"message": "안녕하세요, Modrinth 사용자님!"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} 다운로드가 완료되었습니다. 새로고침하거나 Modrinth App을 종료하면 자동으로 업데이트됩니다."
|
||||
},
|
||||
@@ -878,6 +1244,39 @@
|
||||
"app.world.world-item.players-online": {
|
||||
"message": "{count}명 온라인"
|
||||
},
|
||||
"content.shared-instance.change-version-body": {
|
||||
"message": "버전을 변경해도 로컬 사본만 변경됩니다. 향후 공유 인스턴스를 업데이트할 때 다시 복구되거나 변경될 수 있습니다."
|
||||
},
|
||||
"content.shared-instance.delete-bulk-body": {
|
||||
"message": "선택한 프로젝트 중 일부는 공유 인스턴스의 일부입니다. 삭제해도 로컬 사본만 변경되며, 향후 공유 인스턴스를 업데이트할 때 다시 복구되거나 변경될 수 있습니다."
|
||||
},
|
||||
"content.shared-instance.delete-button": {
|
||||
"message": "그래도 삭제"
|
||||
},
|
||||
"content.shared-instance.delete-many-button": {
|
||||
"message": "그래도 project {count, number}개 삭제"
|
||||
},
|
||||
"content.shared-instance.delete-single-body": {
|
||||
"message": "삭제해도 로컬 사본만 변경됩니다. 향후 공유 인스턴스를 업데이트할 때 다시 복구되거나 변경될 수 있습니다."
|
||||
},
|
||||
"content.shared-instance.disable-bulk-body": {
|
||||
"message": "선택한 프로젝트 중 일부는 공유 인스턴스의 일부입니다. 비활성화해도 로컬 사본만 변경되며, 향후 공유 인스턴스를 업데이트할 때 다시 활성화, 복구 또는 변경될 수 있습니다."
|
||||
},
|
||||
"content.shared-instance.disable-button": {
|
||||
"message": "그래도 비활성화"
|
||||
},
|
||||
"content.shared-instance.disable-many-button": {
|
||||
"message": "그래도 프로젝트 {count, number}개 비활성화"
|
||||
},
|
||||
"content.shared-instance.disable-single-body": {
|
||||
"message": "비활성화해도 로컬 사본만 변경됩니다. 향후 공유 인스턴스를 업데이트할 때 다시 활성화, 복구 또는 변경될 수 있습니다."
|
||||
},
|
||||
"content.shared-instance.unlink-body": {
|
||||
"message": "연동 해제 시 로컬 사본만 변경됩니다. 향후 공유 인스턴스 업데이트에서 다시 복구되거나 변경될 수 있습니다."
|
||||
},
|
||||
"content.shared-instance.warning-header": {
|
||||
"message": "공유 인스턴스의 일부입니다"
|
||||
},
|
||||
"friends.action.add-friend": {
|
||||
"message": "친구 추가"
|
||||
},
|
||||
@@ -941,6 +1340,48 @@
|
||||
"friends.sign-in-to-add-friends": {
|
||||
"message": "<link>Modrinth 계정으로 로그인</link>하여 친구를 추가하고 무엇을 플레이 중인지 확인하세요!"
|
||||
},
|
||||
"installation-settings.shared-instance.linked-title": {
|
||||
"message": "연동된 공유 인스턴스"
|
||||
},
|
||||
"installation-settings.shared-instance.title": {
|
||||
"message": "인스턴스 게시 취소"
|
||||
},
|
||||
"installation-settings.shared-instance.unlink-button": {
|
||||
"message": "공유 인스턴스 연동 해제"
|
||||
},
|
||||
"installation-settings.shared-instance.unlink-description": {
|
||||
"message": "이 로컬 인스턴스의 향후 공유 업데이트 연동을 해제합니다."
|
||||
},
|
||||
"installation-settings.shared-instance.unlinking-button": {
|
||||
"message": "연동 해제 중..."
|
||||
},
|
||||
"installation-settings.shared-instance.unpublish-button": {
|
||||
"message": "공유 인스턴스 게시 취소"
|
||||
},
|
||||
"installation-settings.shared-instance.unpublish-description": {
|
||||
"message": "Modrinth에서 이 공유 인스턴스를 삭제하고 이용자에게 업데이트 전송을 중단합니다. 본인의 로컬 인스턴스는 영향을 받지 않습니다."
|
||||
},
|
||||
"installation-settings.shared-instance.unpublishing-button": {
|
||||
"message": "게시 취소 중..."
|
||||
},
|
||||
"installation-settings.unlink-shared-instance.modal.admonition-body": {
|
||||
"message": "이 작업은 본인의 로컬 인스턴스에만 영향을 미칩니다. 설치된 콘텐츠는 이 기기에 유지되며, 공유 인스턴스 및 이를 이용하는 다른 사용자에게는 영향을 미치지 않습니다."
|
||||
},
|
||||
"installation-settings.unlink-shared-instance.modal.admonition-header": {
|
||||
"message": "공유 인스턴스 연동 해제"
|
||||
},
|
||||
"installation-settings.unlink-shared-instance.modal.header": {
|
||||
"message": "공유 인스턴스 연동 해제"
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.admonition-body": {
|
||||
"message": "이 작업은 Modrinth 서버에서 공유 인스턴스를 삭제합니다. Modrinth 앱에서 이를 이용 중인 사용자는 더 이상 업데이트를 받지 않지만, 본인의 로컬 인스턴스 및 콘텐츠는 이 기기에 유지됩니다."
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.admonition-header": {
|
||||
"message": "공유 인스턴스 게시 취소 중"
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.header": {
|
||||
"message": "공유 인스턴스 게시 취소"
|
||||
},
|
||||
"instance.action.create-shortcut": {
|
||||
"message": "바로가기 만들기"
|
||||
},
|
||||
@@ -1010,6 +1451,12 @@
|
||||
"instance.files.save-as": {
|
||||
"message": "다른 이름으로 저장..."
|
||||
},
|
||||
"instance.locked.delete-button": {
|
||||
"message": "인스턴스 삭제"
|
||||
},
|
||||
"instance.locked.play-tooltip": {
|
||||
"message": "이 인스턴스는 잠겼습니다"
|
||||
},
|
||||
"instance.playtime.never-played": {
|
||||
"message": "아직 플레이 하지 않음"
|
||||
},
|
||||
@@ -1025,6 +1472,45 @@
|
||||
"instance.server-modal.resource-pack": {
|
||||
"message": "리소스 팩"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.actions": {
|
||||
"message": "작업"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.code": {
|
||||
"message": "초대 링크"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.description": {
|
||||
"message": "초대 링크가 유효한 동안 링크를 보유한 사람은 누구나 참여할 수 있습니다."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.empty": {
|
||||
"message": "활성화된 초대가 없습니다."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.expires": {
|
||||
"message": "만료일"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke": {
|
||||
"message": "초대 철회"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke-with-code": {
|
||||
"message": "초대 {code} 철회"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.title": {
|
||||
"message": "활성화된 초대"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.uses": {
|
||||
"message": "사용 횟수"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-body": {
|
||||
"message": "초대 링크 <monospace>{code}</monospace> 사용이 즉시 중단됩니다. 이미 참여한 사용자는 계속 접근 권한을 유지합니다."
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-header": {
|
||||
"message": "이 작업은 되돌릴 수 없습니다"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.confirm": {
|
||||
"message": "초대 철회"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.header": {
|
||||
"message": "초대 철회"
|
||||
},
|
||||
"instance.settings.tabs.general": {
|
||||
"message": "일반"
|
||||
},
|
||||
@@ -1148,6 +1634,9 @@
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} 버전"
|
||||
},
|
||||
"instance.settings.tabs.installation.locked": {
|
||||
"message": "이 인스턴스가 잠긴 상태에서는 설치 설정을 사용할 수 없습니다."
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java 및 메모리"
|
||||
},
|
||||
@@ -1187,6 +1676,9 @@
|
||||
"instance.settings.tabs.java.java-path-placeholder": {
|
||||
"message": "/path/to/java"
|
||||
},
|
||||
"instance.settings.tabs.sharing": {
|
||||
"message": "공유"
|
||||
},
|
||||
"instance.settings.tabs.window": {
|
||||
"message": "창"
|
||||
},
|
||||
@@ -1217,8 +1709,23 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "너비 입력..."
|
||||
},
|
||||
"instance.shared-instance.error.title": {
|
||||
"message": "문제가 발생했습니다"
|
||||
},
|
||||
"instance.shared-instance.network-error.text": {
|
||||
"message": "공유 인스턴스 API에 연결할 수 없습니다"
|
||||
},
|
||||
"instance.shared-instance.network-error.title": {
|
||||
"message": "네트워크 오류"
|
||||
},
|
||||
"instance.shared-instance.owner-tooltip": {
|
||||
"message": "이 인스턴스의 콘텐츠가 다른 사용자에게 공유되는 중입니다."
|
||||
},
|
||||
"instance.shared-instance.publish-review.added-label": {
|
||||
"message": "추가됨"
|
||||
},
|
||||
"instance.shared-instance.publish-review.admonition-header": {
|
||||
"message": "플레이어에게 업데이트 게시"
|
||||
"message": "플레이어에게 업데이트 업로드"
|
||||
},
|
||||
"instance.shared-instance.publish-review.config-title-v2": {
|
||||
"message": "설정 파일 선택"
|
||||
@@ -1230,10 +1737,10 @@
|
||||
"message": "변경 사항 검토"
|
||||
},
|
||||
"instance.shared-instance.publish-review.publish-button": {
|
||||
"message": "업데이트 푸시"
|
||||
"message": "업데이트 업로드"
|
||||
},
|
||||
"instance.shared-instance.publish-review.removed-label": {
|
||||
"message": "제거됨"
|
||||
"message": "삭제됨"
|
||||
},
|
||||
"instance.shared-instance.tooltip": {
|
||||
"message": "이 인스턴스의 콘텐츠는 다른 사용자가 관리하고 있습니다."
|
||||
@@ -1247,6 +1754,18 @@
|
||||
"instance.shared-instance.unavailable.locked-text": {
|
||||
"message": "이 공유 인스턴스는 콘텐츠 조정 팀에 의해 잠겼습니다. 기본 인스턴스 업데이트를 받지 않으며 플레이할 수 없습니다."
|
||||
},
|
||||
"instance.shared-instance.unavailable.locked-title": {
|
||||
"message": "인스턴스 잠김"
|
||||
},
|
||||
"instance.shared-instance.unavailable.manager-fallback": {
|
||||
"message": "인스턴스 관리자"
|
||||
},
|
||||
"instance.shared-instance.unavailable.text": {
|
||||
"message": "로컬 인스턴스는 계속 사용할 수 있지만, 더 이상 연동되지 않으며 업데이트를 받지 않습니다."
|
||||
},
|
||||
"instance.shared-instance.unavailable.title": {
|
||||
"message": "공유 인스턴스를 더 이상 사용할 수 없음"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Minecraft 서버"
|
||||
},
|
||||
@@ -1331,6 +1850,39 @@
|
||||
"minecraft-required.sign-in": {
|
||||
"message": "Microsoft 계정 로그인"
|
||||
},
|
||||
"modal.modrinth-account-required.browser-description": {
|
||||
"message": "로그인을 위한 새 탭이 열렸습니다. 해당 탭에서 로그인을 완료한 후 앱 돌아오세요."
|
||||
},
|
||||
"modal.modrinth-account-required.continue-in-browser-heading": {
|
||||
"message": "브라우저에서 계속 진행"
|
||||
},
|
||||
"modal.modrinth-account-required.create-account-button": {
|
||||
"message": "계정 생성"
|
||||
},
|
||||
"modal.modrinth-account-required.description": {
|
||||
"message": "이 기능을 사용하려면 Modrinth 계정에 로그인해야 합니다."
|
||||
},
|
||||
"modal.modrinth-account-required.header": {
|
||||
"message": "계정 필요"
|
||||
},
|
||||
"modal.modrinth-account-required.open-browser-again-button": {
|
||||
"message": "브라우저 다시 열기"
|
||||
},
|
||||
"modal.modrinth-account-required.sign-in-button": {
|
||||
"message": "Modrinth 로그인"
|
||||
},
|
||||
"modal.modrinth-account-required.sign-in-heading": {
|
||||
"message": "Modrinth 계정 로그인"
|
||||
},
|
||||
"modal.modrinth-account-required.signing-in-header": {
|
||||
"message": "로그인 중"
|
||||
},
|
||||
"modal.modrinth-account-required.support-prompt": {
|
||||
"message": "로그인에 문제가 있나요? <support>지원 받기</support>"
|
||||
},
|
||||
"modal.modrinth-account-required.waiting-for-browser": {
|
||||
"message": "브라우저 확인 대기 중..."
|
||||
},
|
||||
"search.filter.locked.instance": {
|
||||
"message": "인스턴스에서 관리"
|
||||
},
|
||||
@@ -1354,5 +1906,11 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "로더가 서버에 의해 제공됩니다"
|
||||
},
|
||||
"settings.sidebar.label.account": {
|
||||
"message": "계정"
|
||||
},
|
||||
"settings.sidebar.label.display": {
|
||||
"message": "디스플레이"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,12 +2,21 @@
|
||||
"app.action-bar.downloading-java": {
|
||||
"message": "Sedang memuat turun Java {version}"
|
||||
},
|
||||
"app.action-bar.downloading-update": {
|
||||
"message": "Sedang memuat turun kemas kini"
|
||||
},
|
||||
"app.action-bar.downloads": {
|
||||
"message": "Muat Turun"
|
||||
},
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Sembunyikan lebih banyak pemasangan yang berjalan"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Disalin"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Salin butiran"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Ketepikan"
|
||||
},
|
||||
@@ -44,21 +53,12 @@
|
||||
"app.action-bar.view-logs": {
|
||||
"message": "Lihat log"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Mendayakan pemaparan lanjutan seperti kesan kabur yang boleh menyebabkan masalah prestasi tanpa pemaparan dipercepatkan perkakasan."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Pemaparan lanjutan"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Pilih tema warna pilihan anda untuk Modrinth App."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Tema warna"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Tukar laman utama yang dibuka oleh pelancar."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Laman utama"
|
||||
},
|
||||
@@ -68,42 +68,12 @@
|
||||
"app.appearance-settings.default-landing-page.title": {
|
||||
"message": "Laman pendaratan lalai"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Menyahdayakan tanda nama di atas pemain anda pada halaman kekulit."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Sembunyikan tanda nama"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Sertakan dunia terkini dalam bahagian \"Lompat kembali\" pada Laman Utama."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Lompat kembali ke dalam dunia"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Meminimumkan pelancar apabila proses Minecraft bermula."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Minimumkan pelancar"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Gunakan bingkai tetingkap sistem (aplikasi perlu dimulakan semula)."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Hiasan asli"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Melangkau pengesahan berisiko rendah secara automatik seperti pemasangan pek mod pendua, pemadaman kandungan biasa, kemas kini pukal, menyahpautkan pek mod dan gesaan pembaikan. Amaran berbahaya masih akan ditunjukkan."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Membolehkan keupayaan untuk menogol bar sisi."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Togol bar sisi"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Jika anda cuba memasang fail Modrinth Pack (.mrpack) yang tidak dihoskan pada Modrinth, kami akan memastikan anda memahami risikonya sebelum memasangnya."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "Beri saya amaran sebelum memasang pek mod yang tidak diketahui"
|
||||
},
|
||||
@@ -185,6 +155,9 @@
|
||||
"app.install.phase.reading_pack_manifest": {
|
||||
"message": "Sedang membaca manifest pek"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.added-label": {
|
||||
"message": "Ditambah"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Semua data untuk pemasangan anda akan dipadamkan secara kekal, termasuk dunia, konfigurasi dan semua kandungan yang dipasang."
|
||||
},
|
||||
@@ -254,6 +227,15 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Cari {count} dunia..."
|
||||
},
|
||||
"app.java-detection.cancel": {
|
||||
"message": "Batal"
|
||||
},
|
||||
"app.java-detection.columns.path": {
|
||||
"message": "Laluan"
|
||||
},
|
||||
"app.java-detection.select": {
|
||||
"message": "Pilih"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Pasang untuk mainkan"
|
||||
},
|
||||
@@ -263,6 +245,9 @@
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, other {# mod}}"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.spam": {
|
||||
"message": "Spam"
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Pemasangan yang dikongsi"
|
||||
},
|
||||
@@ -272,24 +257,36 @@
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Kemas kini untuk mainkan"
|
||||
},
|
||||
"app.modal.update-to-play.shared-instance-added-label": {
|
||||
"message": "Ditambah"
|
||||
},
|
||||
"app.nav.home": {
|
||||
"message": "Laman utama"
|
||||
},
|
||||
"app.news.title": {
|
||||
"message": "Berita"
|
||||
},
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Projek ini sudah dipasang"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Kembali menemukan"
|
||||
},
|
||||
"app.settings.default-instance-options.width.title": {
|
||||
"message": "Lebar"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Mod pembangun didayakan."
|
||||
},
|
||||
"app.settings.downloading": {
|
||||
"message": "Sedang memuat turun v{version}"
|
||||
},
|
||||
"app.settings.operating-system.macos": {
|
||||
"message": "macOS"
|
||||
},
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Tampilan"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Tetapan lalai pemasangan"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Pemasangan Java"
|
||||
},
|
||||
@@ -746,6 +743,9 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Masukkan lebar..."
|
||||
},
|
||||
"instance.shared-instance.publish-review.added-label": {
|
||||
"message": "Ditambah"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Pelayan Minecraft"
|
||||
},
|
||||
|
||||
@@ -144,19 +144,19 @@
|
||||
"message": "Je privacy en hoe advertenties Modrinth ondersteunen"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Activeert geavanceerde weergaves zoals blur effecten die mogelijke prestatieproblemen opleveren zonder hardware-versnelde weergeving."
|
||||
"message": "Schakel visuele effecten zoals achtergrondvervaging in. Zonder hardwareversnelling kan dit ten koste gaan van de prestaties."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Geavanceerde weergave"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Selecteer je voorkeur kleurenthema voor de Modrinth App."
|
||||
"message": "Kies het kleurenthema dat door de Modrinth-app wordt gebruikt."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Kleurenthema"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Wijzig de pagina waarop de launcher opent."
|
||||
"message": "Kies de pagina die wordt weergegeven wanneer de Modrinth-app wordt geopend."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Start"
|
||||
@@ -168,49 +168,49 @@
|
||||
"message": "Standaard openingspagina"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Schakelt het nametag boven jouw speler op de skins pagina uit."
|
||||
"message": "Verberg je gebruikersnaam boven het voorbeeld van de speler op de Skinkiezer-pagina."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Verberg nametag"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Inclusief recente werelden in het gedeelte \"Ga terug\" op de startpagina."
|
||||
"message": "Toon recent gespeelde werelden in het Ga terug-gedeelte op de startpagina."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Ga terug in werelden"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Minimaliseer de launcher als een Minecraft proces wordt gestart."
|
||||
"message": "Minimaliseer de Modrinth-app zodra Minecraft opstart."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Minimaliseer launcher"
|
||||
"message": "App minimaliseren"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Gebruik systeem venster frame (app opnieuw starten vereist)."
|
||||
"message": "Gebruik de titelbalk en vensterbedieningselementen van je besturingssysteem. Hiervoor moet de app opnieuw worden opgestart."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Oorspronkelijke versieringen"
|
||||
"message": "Systeemvensterframe"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Toont hoeveel tijd je aan een instantie hebt besteed."
|
||||
"message": "Laat zien hoe lang je elke instantie hebt gespeeld."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Speeltijd laten zien"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Bevestigingen met een laag risico, zoals het installeren van dubbele modpacks, het verwijderen van normale inhoud, bulkupdates, het ontkoppelen van modpacks en reparatieverzoeken, worden automatisch overgeslagen. Waarschuwingen voor gevaarlijke dingen worden nog steeds weergegeven."
|
||||
"message": "Sla bevestigingen over voor acties met een laag risico, zoals het installeren van dubbele exemplaren, het verwijderen van normale inhoud, bulkupdates, het opheffen van koppelingen en herstelbewerkingen. Waarschuwingen voor gevaarlijke handelingen worden altijd weergegeven."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Niet-essentiële waarschuwingen overslaan"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Schakelt de mogelijkheid om de zijbalk in- of uit te schakelen in."
|
||||
"message": "Verberg de rechterzijbalk standaard en voeg een knop toe om deze weer te geven of te verbergen."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Schakel zijbalk"
|
||||
"message": "Rechterzijbalk verbergen"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Als je probeert een Modrinth Pack-bestand (.mrpack) te installeren dat niet op Modrinth zelf wordt gehost, zorgen we ervoor dat je de risico's begrijpt voordat je het installeert."
|
||||
"message": "Geef een veiligheidswaarschuwing weer voordat een Modrinth-pakket (.mrpack) wordt geïnstalleerd dat niet op Modrinth wordt gehost."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "Waarschuw mij voordat ik onbekende modpacks installeer"
|
||||
@@ -221,6 +221,15 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Authenticatieservers kunnen niet worden bereikt"
|
||||
},
|
||||
"app.behavior-settings.confirmations.title": {
|
||||
"message": "Bevestigingen"
|
||||
},
|
||||
"app.behavior-settings.content.title": {
|
||||
"message": "Startpagina en inhoud"
|
||||
},
|
||||
"app.behavior-settings.startup-and-navigation.title": {
|
||||
"message": "Opstarten en navigeren"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "Server toevoegen aan instantie"
|
||||
},
|
||||
@@ -242,12 +251,18 @@
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "Terug naar instantie"
|
||||
},
|
||||
"app.browse.discover-project-type": {
|
||||
"message": "Ontdek {projectType}"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Ontdek servers"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Al toegevoegde servers verbergen"
|
||||
},
|
||||
"app.browse.hide-installed-modpacks": {
|
||||
"message": "Verberg al geïnstalleerd"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Modpacks"
|
||||
},
|
||||
@@ -362,9 +377,18 @@
|
||||
"app.instance.admonitions.shared-instance.review-header": {
|
||||
"message": "Wijzigingen bekijken"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-update-button": {
|
||||
"message": "Update bekijken"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.reviewing-button": {
|
||||
"message": "Controleren..."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-body": {
|
||||
"message": "Er is een update nodig om {name} te kunnen spelen. Werk het spel bij naar de nieuwste versie om het te kunnen starten."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-header": {
|
||||
"message": "Update is beschikbaar"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Alle gegevens van je instantie worden definitief verwijderd, inclusief je werelden, configuraties en alle geïnstalleerde inhoud."
|
||||
},
|
||||
@@ -431,6 +455,9 @@
|
||||
"app.instance.share.invite-modal.heading": {
|
||||
"message": "{name} delen"
|
||||
},
|
||||
"app.instance.share.invite-modal.user-limit-reached": {
|
||||
"message": "Deze instantie heeft de limiet van {limit} gebruikers bereikt."
|
||||
},
|
||||
"app.instance.share.locked.empty-description-prefix": {
|
||||
"message": "Je moet je aanmelden als"
|
||||
},
|
||||
@@ -449,6 +476,12 @@
|
||||
"app.instance.share.locked.wrong-account-heading": {
|
||||
"message": "Verkeerd account"
|
||||
},
|
||||
"app.instance.share.members.empty": {
|
||||
"message": "Nog geen gebruikers zijn lid geworden"
|
||||
},
|
||||
"app.instance.share.members.no-filter-results": {
|
||||
"message": "Geen gebruikers voldoen aan je filters."
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-access": {
|
||||
"message": "Ze zullen geen updates meer ontvangen voor deze gedeelde instantie"
|
||||
},
|
||||
@@ -479,6 +512,12 @@
|
||||
"app.instance.share.sign-in.button": {
|
||||
"message": "Aanmelden"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.description": {
|
||||
"message": "De dienst voor gedeelde instanties is momenteel niet beschikbaar, probeer het later nog eens"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.heading": {
|
||||
"message": "Kan geen verbinding maken"
|
||||
},
|
||||
"app.instance.share.unlink.body": {
|
||||
"message": "Je moet dit modpack ontkoppelen om je instantie te kunnen delen"
|
||||
},
|
||||
@@ -551,6 +590,9 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "Noch servers noch werelden toegevoegd"
|
||||
},
|
||||
"app.instance.worlds.refreshing": {
|
||||
"message": "Verversen..."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "Server verwijderen"
|
||||
},
|
||||
@@ -566,12 +608,60 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Zoek werelden"
|
||||
},
|
||||
"app.java-detection.cancel": {
|
||||
"message": "Annuleren"
|
||||
},
|
||||
"app.java-detection.columns.actions": {
|
||||
"message": "Acties"
|
||||
},
|
||||
"app.java-detection.columns.path": {
|
||||
"message": "Pad"
|
||||
},
|
||||
"app.java-detection.columns.version": {
|
||||
"message": "Versie"
|
||||
},
|
||||
"app.java-detection.no-installations-found": {
|
||||
"message": "Geen Java-installaties gevonden."
|
||||
},
|
||||
"app.java-detection.select": {
|
||||
"message": "Selecteren"
|
||||
},
|
||||
"app.java-detection.selected": {
|
||||
"message": "Geselecteerd"
|
||||
},
|
||||
"app.java-detection.title": {
|
||||
"message": "Selecteer Java-installatie"
|
||||
},
|
||||
"app.java-selector.already-installed": {
|
||||
"message": "Al geïnstalleerd"
|
||||
},
|
||||
"app.java-selector.browse": {
|
||||
"message": "Bladeren"
|
||||
},
|
||||
"app.java-selector.detect": {
|
||||
"message": "Detecteren"
|
||||
},
|
||||
"app.java-selector.install-recommended": {
|
||||
"message": "Aanbevolen instantie"
|
||||
},
|
||||
"app.java-selector.installing": {
|
||||
"message": "Installeren..."
|
||||
},
|
||||
"app.java-selector.path.placeholder": {
|
||||
"message": "/pad/naar/java"
|
||||
},
|
||||
"app.java-selector.test-installation": {
|
||||
"message": "Java-installatie testen"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context": {
|
||||
"message": "Aanvullende context"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context-placeholder": {
|
||||
"message": "Voeg links en afbeeldingen toe als dat mogelijk en relevant is"
|
||||
},
|
||||
"app.modal.install-to-play.block-user": {
|
||||
"message": "Gebruiker blokkeren"
|
||||
},
|
||||
"app.modal.install-to-play.content-you-are-reporting": {
|
||||
"message": "Instantie die je meldt"
|
||||
},
|
||||
@@ -593,6 +683,9 @@
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Deze uitnodiging is aangemaakt door een andere Modrinth-gebruiker, niet door Modrinth zelf. Accepteer alleen uitnodigingen van mensen die je vertrouwt."
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning-with-creator": {
|
||||
"message": "Deze uitnodiging is aangemaakt door <creator>{username}</creator>, niet door Modrinth. Accepteer alleen uitnodigingen van mensen die je vertrouwt."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural,one {# mod}other {# mods}}"
|
||||
},
|
||||
@@ -650,6 +743,9 @@
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Onbekende bestanden"
|
||||
},
|
||||
"app.modal.install-to-play.user-blocked": {
|
||||
"message": "Gebruiker geblokkeerd"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Inhoud bekijken"
|
||||
},
|
||||
@@ -677,6 +773,36 @@
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Er is een update nodig om {name} te spelen. Werk het spel bij naar de nieuwste versie om het te kunnen starten."
|
||||
},
|
||||
"app.nav.create-new-instance": {
|
||||
"message": "Nieuwe instantie aanmaken"
|
||||
},
|
||||
"app.nav.home": {
|
||||
"message": "Start"
|
||||
},
|
||||
"app.nav.library": {
|
||||
"message": "Bibliotheek"
|
||||
},
|
||||
"app.nav.modrinth-account": {
|
||||
"message": "Modrinth-account"
|
||||
},
|
||||
"app.nav.modrinth-hosting": {
|
||||
"message": "Modrinth Hosting"
|
||||
},
|
||||
"app.nav.sign-in-to-modrinth-account": {
|
||||
"message": "Meld je aan bij een Modrinth-account"
|
||||
},
|
||||
"app.nav.signed-in-as": {
|
||||
"message": "Aangemeld als <user>{username}</user>"
|
||||
},
|
||||
"app.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Upgrade naar Modrinth+"
|
||||
},
|
||||
"app.news.title": {
|
||||
"message": "Nieuws"
|
||||
},
|
||||
"app.news.view-all": {
|
||||
"message": "Al het nieuws bekijken"
|
||||
},
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Dit project is al geïnstalleerd"
|
||||
},
|
||||
@@ -686,6 +812,9 @@
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Terug naar Ontdekken"
|
||||
},
|
||||
"app.project.install-context.back-to-instance": {
|
||||
"message": "Terug naar de instantie"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Alle versies"
|
||||
},
|
||||
@@ -698,20 +827,188 @@
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Al geïnstalleerd"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-show-tooltip": {
|
||||
"message": "Sleep om recente instanties weer te geven"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-tooltip": {
|
||||
"message": "Sleep om formaat aan te passen"
|
||||
},
|
||||
"app.restarting": {
|
||||
"message": "Opnieuw opstarten..."
|
||||
},
|
||||
"app.settings.app-version": {
|
||||
"message": "Modrinth-app {version}"
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.description": {
|
||||
"message": "Omgevingsvariabelen die bij het opstarten van een instantie worden ingesteld."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.placeholder": {
|
||||
"message": "Omgevingsvariabelen invoeren..."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.title": {
|
||||
"message": "Omgevingsvariabelen"
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.description": {
|
||||
"message": "Start instanties in volledig scherm door het bestand options.txt aan te passen."
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.title": {
|
||||
"message": "Volledig scherm"
|
||||
},
|
||||
"app.settings.default-instance-options.height.description": {
|
||||
"message": "De hoogte van het spelvenster bij het opstarten."
|
||||
},
|
||||
"app.settings.default-instance-options.height.placeholder": {
|
||||
"message": "Hoogte invoeren..."
|
||||
},
|
||||
"app.settings.default-instance-options.height.title": {
|
||||
"message": "Hoogte"
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.description": {
|
||||
"message": "Argumenten die bij het starten van een instantie aan Java worden doorgegeven."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.placeholder": {
|
||||
"message": "Voer Java-argumenten in..."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.title": {
|
||||
"message": "Java-argumenten"
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.description": {
|
||||
"message": "Maximaal beschikbaar geheugen voor elke instantie."
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.title": {
|
||||
"message": "Geheugentoewijzing"
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.description": {
|
||||
"message": "Wordt uitgevoerd nadat het spel is afgesloten."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.placeholder": {
|
||||
"message": "Voer commando voor na het afsluiten in..."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.title": {
|
||||
"message": "Hook voor na het afsluiten"
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.description": {
|
||||
"message": "Wordt uitgevoerd voordat de instantie wordt gestart."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.placeholder": {
|
||||
"message": "Voer commando voor het opstarten in..."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.title": {
|
||||
"message": "Hook voor het opstarten"
|
||||
},
|
||||
"app.settings.default-instance-options.width.description": {
|
||||
"message": "De breedte van het spelvenster bij het opstarten."
|
||||
},
|
||||
"app.settings.default-instance-options.width.placeholder": {
|
||||
"message": "Voer breedte in..."
|
||||
},
|
||||
"app.settings.default-instance-options.width.title": {
|
||||
"message": "Breedte"
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.description": {
|
||||
"message": "Commando gebruikt om het Minecraft proces te om wikkelen."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.placeholder": {
|
||||
"message": "Type een omwikkelcommando in..."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.title": {
|
||||
"message": "Omwikkel haak"
|
||||
},
|
||||
"app.settings.developer-mode-button.label": {
|
||||
"message": "Schakel ontwikkelaars modus"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Ontwikkelaarsmodus ingeschakeld."
|
||||
},
|
||||
"app.settings.downloading": {
|
||||
"message": "v{version} wordt gedownload"
|
||||
},
|
||||
"app.settings.java-installations.location.title": {
|
||||
"message": "Java {version, number} locatie"
|
||||
},
|
||||
"app.settings.operating-system.macos": {
|
||||
"message": "macOS"
|
||||
},
|
||||
"app.settings.privacy.ads-consent.intro": {
|
||||
"message": "Advertenties maken Modrinth mogelijk en financieren de uitbetalingen aan makers. Onze partners kunnen cookies in de app opslaan of gebruiken om advertenties te personaliseren en de prestaties te meten. Je kunt je hieronder afmelden of je voorkeuren beheren."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.description": {
|
||||
"message": "Laat Modrinth als jouw activiteit op Discord. Dit verandert niet activiteiten toegevoegd door mods."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.title": {
|
||||
"message": "Discord Rich Presence"
|
||||
},
|
||||
"app.settings.privacy.telemetry.description": {
|
||||
"message": "Modrinth verzamelt geanonimiseerde analyse- en gebruiksgegevens om de gebruikerservaring te verbeteren en uw ervaring te personaliseren. Door deze optie uit te schakelen, meldt u zich af en worden uw gegevens niet langer verzameld."
|
||||
},
|
||||
"app.settings.privacy.telemetry.title": {
|
||||
"message": "Telemetrie"
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.description": {
|
||||
"message": "Geef de knop 'Details kopiëren' weer terwijl een installatie in de wachtrij staat of wordt uitgevoerd. Deze actie is altijd beschikbaar voor mislukte of onderbroken installaties."
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.title": {
|
||||
"message": "Altijd 'Details kopiëren' laten zien"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.description": {
|
||||
"message": "De app kan wat trager laden totdat de cache opnieuw is opgebouwd."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.title": {
|
||||
"message": "De cache van de app wissen?"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.description": {
|
||||
"message": "Wis de gegevens in de cache en download ze opnieuw via Modrinth. De app kan wat trager laden totdat de cache opnieuw is opgebouwd."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.purge": {
|
||||
"message": "Cache leegmaken"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.title": {
|
||||
"message": "App-cache"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.description": {
|
||||
"message": "Hier worden back-ups van belangrijke app-gegevens opgeslagen voor het geval je ze later nodig hebt."
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.open-folder": {
|
||||
"message": "Open de map met back-ups"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.title": {
|
||||
"message": "Back-ups van de app-database"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.browse": {
|
||||
"message": "Zoek naar een app-folder"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.description": {
|
||||
"message": "Hier slaat de Modrinth-app instanties en andere bestanden op. Wijzigingen worden pas van kracht nadat de app opnieuw is opgestart."
|
||||
},
|
||||
"app.settings.resource-management.app-directory.select": {
|
||||
"message": "Kies een nieuwe app-folder"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.title": {
|
||||
"message": "App-folder"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.description": {
|
||||
"message": "Het aantal bestanden dat de app tegelijkertijd kan downloaden. Verlaag dit aantal als downloads via je verbinding niet betrouwbaar zijn. Hiervoor moet de app opnieuw worden opgestart."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.title": {
|
||||
"message": "Maximaal aantal gelijktijdige downloads"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.description": {
|
||||
"message": "Het aantal bestanden dat de app tegelijkertijd naar de schijf kan schrijven. Verlaag deze waarde als je vaak I/O-fouten tegenkomt. Hiervoor moet de app opnieuw worden opgestart."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.title": {
|
||||
"message": "Maximaal aantal gelijktijdige schrijfbewerkingen"
|
||||
},
|
||||
"app.settings.sidebar.label.instances": {
|
||||
"message": "Instanties"
|
||||
},
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Uiterlijk"
|
||||
},
|
||||
"app.settings.tabs.behavior": {
|
||||
"message": "Gedrag"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Standaardopties voor instantie"
|
||||
"message": "Standaard spelopties"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Java installaties"
|
||||
@@ -725,6 +1022,9 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "Bronnenbeheer"
|
||||
},
|
||||
"app.sidebar.playing-as": {
|
||||
"message": "Spelen als"
|
||||
},
|
||||
"app.skins.add-button": {
|
||||
"message": "Skin toevoegen"
|
||||
},
|
||||
@@ -884,6 +1184,21 @@
|
||||
"app.skins.toggle-ears-features-on": {
|
||||
"message": "Inschakelen"
|
||||
},
|
||||
"app.survey.body": {
|
||||
"message": "Zou je een paar vragen willen beantwoorden over je ervaringen met de Modrinth-app?"
|
||||
},
|
||||
"app.survey.footer": {
|
||||
"message": "Deze feedback wordt rechtstreeks doorgestuurd naar het Modrinth-team en zal als leidraad dienen voor toekomstige updates!"
|
||||
},
|
||||
"app.survey.no-thanks": {
|
||||
"message": "Nee, bedankt"
|
||||
},
|
||||
"app.survey.take-survey": {
|
||||
"message": "Aan enquête meedoen"
|
||||
},
|
||||
"app.survey.title": {
|
||||
"message": "Hoi, Modrinth-gebruiker!"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} is klaar met downloaden. Herlaad om nu te updaten, of automatisch wanneer je de Modrinth App afsluit."
|
||||
},
|
||||
@@ -914,6 +1229,9 @@
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "Versie {version} is succesvol geïnstalleerd!"
|
||||
},
|
||||
"app.user.project.install-to-instance": {
|
||||
"message": "Op instantie installeren"
|
||||
},
|
||||
"app.world.server-modal.placeholder-address": {
|
||||
"message": "voorbeeld.modrinth.gg"
|
||||
},
|
||||
@@ -1160,6 +1478,45 @@
|
||||
"instance.server-modal.resource-pack": {
|
||||
"message": "Bronpakket"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.actions": {
|
||||
"message": "Acties"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.code": {
|
||||
"message": "Uitnodigingslink"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.description": {
|
||||
"message": "Iedereen die zo'n uitnodigingslink heeft, kan meedoen zolang deze actief is."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.empty": {
|
||||
"message": "Er zijn geen actieve uitnodigingen."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.expires": {
|
||||
"message": "Vervalt"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke": {
|
||||
"message": "Uitnodiging intrekken"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke-with-code": {
|
||||
"message": "Uitnodiging {code} intrekken"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.title": {
|
||||
"message": "Actieve uitnodigingen"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.uses": {
|
||||
"message": "Keren gebruikt"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-body": {
|
||||
"message": "De uitnodigingslink <monospace>{code}</monospace> zal gelijk niet meer werken. Mensen die zich al hebben aangemeld, behouden hun toegang."
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-header": {
|
||||
"message": "Deze actie kan niet ongedaan worden gemaakt"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.confirm": {
|
||||
"message": "Uitnodiging intrekken"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.header": {
|
||||
"message": "Uitnodiging intrekken"
|
||||
},
|
||||
"instance.settings.tabs.general": {
|
||||
"message": "Algemeen"
|
||||
},
|
||||
@@ -1268,6 +1625,27 @@
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Game opstart haakjes"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.description": {
|
||||
"message": "Hooks worden uitgevoerd in de werkfolder van de instantie, met de volgende variabelen:"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-dir.description": {
|
||||
"message": "$INST_DIR: Het absolute pad naar de map van de instantie"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-id.description": {
|
||||
"message": "$INST_ID: De naam van de map van de instantie"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java-args.description": {
|
||||
"message": "$INST_JAVA_ARGS: De JVM-argumenten die aan het spel worden doorgegeven"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java.description": {
|
||||
"message": "$INST_JAVA: Het absolute pad naar het Java-uitvoeringsbestand"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-mc-dir.description": {
|
||||
"message": "$INST_MC_DIR: Een alias voor $INST_DIR"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-name.description": {
|
||||
"message": "$INST_NAME: De naam van de instantie"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper": {
|
||||
"message": "Wrapper"
|
||||
},
|
||||
@@ -1361,6 +1739,12 @@
|
||||
"instance.shared-instance.error.title": {
|
||||
"message": "Er is iets misgegaan"
|
||||
},
|
||||
"instance.shared-instance.network-error.text": {
|
||||
"message": "Kan geen verbinding maken met de API voor gedeelde instanties"
|
||||
},
|
||||
"instance.shared-instance.network-error.title": {
|
||||
"message": "Netwerkfout"
|
||||
},
|
||||
"instance.shared-instance.owner-tooltip": {
|
||||
"message": "De inhoud van deze instantie wordt gedeeld met andere gebruikers."
|
||||
},
|
||||
@@ -1496,9 +1880,6 @@
|
||||
"modal.modrinth-account-required.browser-description": {
|
||||
"message": "Er is een nieuw tabblad geopend om je aan te melden. Log daar in en ga vervolgens terug naar de app."
|
||||
},
|
||||
"modal.modrinth-account-required.cancel-button": {
|
||||
"message": "Annuleren"
|
||||
},
|
||||
"modal.modrinth-account-required.continue-in-browser-heading": {
|
||||
"message": "Doorgaan in je browser"
|
||||
},
|
||||
@@ -1552,5 +1933,11 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader is gegeven door de server"
|
||||
},
|
||||
"settings.sidebar.label.account": {
|
||||
"message": "Account"
|
||||
},
|
||||
"settings.sidebar.label.display": {
|
||||
"message": "Weergave"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,21 +56,12 @@
|
||||
"app.action-bar.view-logs": {
|
||||
"message": "Vis logger"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Skrur på avansert rendering, som for eksempel uskarphetseffekter, som kan forårsake ytelsesproblemer om man ikke har maskinvareaksellerert rendering."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Avansert rendering"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Velg ditt foretrukne fargetema for Modrinth App."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Fargetema"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Endre sida som vises når launcheren åpnes."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Hjem"
|
||||
},
|
||||
@@ -80,36 +71,15 @@
|
||||
"app.appearance-settings.default-landing-page.title": {
|
||||
"message": "Åpningsside"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Skjuler navnelappen over din spiller på utseende siden."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Gjøm navnelapp"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Minimer launcheren"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Viser hvor lenge du har spilt et tilfelle."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Vis spilletid"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Hopper automatisk over lav-rissiko fastslåelser som modpakkeinstalasjonsduplikat, vanlig innholdsletting, bolkoppdateringer, avkoble modpakker, og reparasjonsprompter. Farlige advarsler vil fortsatt vises."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Hopp over mindre viktige advarsler"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Aktiverer evnen til å skru sidefeltet av/på."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Sidefeltsveksling"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Hvis du prøver å laste ned en Modrinth Pakke fil (.mrpack) som er ukjent for Modrinth så kommer vi til å forsikre oss om at du forstår risikoene før du installerer den."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "Advar meg før jeg installerer ukjente modpakker"
|
||||
},
|
||||
@@ -233,9 +203,6 @@
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Utseende"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Vanlige tilfelleinstillinger"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Java installasjoner"
|
||||
},
|
||||
|
||||
@@ -144,19 +144,19 @@
|
||||
"message": "Twoja prywatność i jak reklamy wspierają Modrinth"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Włącza zaawansowane renderowanie, takie jak efekty rozmycia, które może powodować problemy z wydajnością bez sprzętowej akceleracji renderowania."
|
||||
"message": "Włącz efekty wizualne, takie jak rozmycie tła. Może to negatywnie wpłynąć na wydajność, jeżeli akceleracja sprzętowa jest wyłączona."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Zaawansowane renderowanie"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Wybierz preferowany motyw kolorystyczny dla Modrinth App."
|
||||
"message": "Wybierz motyw użyty przez Modrinth App."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Motyw"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Ustaw stronę, która pojawia się po włączeniu launchera."
|
||||
"message": "Wybierz stronę, która pojawi się po uruchomieniu Modrinth App."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Strona główna"
|
||||
@@ -168,49 +168,43 @@
|
||||
"message": "Domyślna strona główna"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Wyłącza nazwę użytkownika nad modelem gracza na stronie skórek."
|
||||
"message": "Ukryj nazwę użytkownika pokazaną nad podglądem wyglądu gracza na stronie wyboru skórki."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Ukryj nazwę"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Pokazuje ostatnie światy w sekcji \"Wskocz z powrotem do światów\" na stronie głównej."
|
||||
"message": "Pokaż ostatnie światy w sekcji \"Wskocz z powrotem do światów\" na stronie głównej."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Wskocz z powrotem do światów"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Minimalizuj launcher po włączeniu procesu Minecraft."
|
||||
"message": "Minimalizuje Modrinth App po uruchomieniu Minecraft."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Minimalizuj launcher"
|
||||
"message": "Minimalizuj aplikację"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Używaj systemowej ramki okna (wymaga ponownego uruchomienia)."
|
||||
"message": "Używaj pasek tytułu i kontrolki okna systemu operacyjnego. Wymaga ponownego uruchomienia aplikacji."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Systemowe dekoracje"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Pokazuje czas gry spędzony w danej instancji."
|
||||
"message": "Systemowa ramka okna"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Pokaż czas gry"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Automatycznie pomija mało znaczące potwierdzenia takie jak duplikaty instalacji paczek modów, usuwanie zwykłej zawartości, masowe aktualizacje, odłączanie paczek modów i naprawianie. Ostrzeżenia o potencjalnie niebezpiecznych akcjach będą nadal pokazywane."
|
||||
"message": "Pomija potwierdzenia dla akcji z niskim ryzykiem, takich jak: duplikowanie instalacji, normalne usuwanie zawartości, aktualizacje zbiorcze, odłączanie udostępnionych instancji oraz naprawy. Ostrzeżenia dla niebezpiecznych akcji wciąż będą pokazywane."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Pomiń mało znaczące ostrzeżenia"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Umożliwia przełączenie paska bocznego."
|
||||
"message": "Domyślnie ukrywa prawy pasek boczny i dodaje guzik pozwalający go pokazywać lub ukrywać."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Przełącz pasek boczny"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Jeżeli spróbujesz zainstalować plik Modrinth Pack (.mrpack) którego nie można znaleźć na Modrinth, poinformujemy cię o możliwym ryzyku, zanim go zainstalujesz."
|
||||
"message": "Ukryj prawy pasek boczny"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "Ostrzegaj mnie przed instalowaniem nieznanych paczek modów"
|
||||
@@ -221,6 +215,15 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Nie udało się połączyć się z serwerami uwierzytelniania"
|
||||
},
|
||||
"app.behavior-settings.confirmations.title": {
|
||||
"message": "Potwierdzenia"
|
||||
},
|
||||
"app.behavior-settings.content.title": {
|
||||
"message": "Strona główna i zawartość"
|
||||
},
|
||||
"app.behavior-settings.startup-and-navigation.title": {
|
||||
"message": "Uruchamianie i nawigacja"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "Dodawanie serwera do instancji"
|
||||
},
|
||||
@@ -242,12 +245,18 @@
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "Powrót do instancji"
|
||||
},
|
||||
"app.browse.discover-project-type": {
|
||||
"message": "Odkrywaj {projectType}"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Odkryj serwery"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Ukryj już dodane serwery"
|
||||
},
|
||||
"app.browse.hide-installed-modpacks": {
|
||||
"message": "Ukryj już zainstalowane"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Paczki modów"
|
||||
},
|
||||
@@ -338,6 +347,9 @@
|
||||
"app.instance.admonitions.shared-instance.added-label": {
|
||||
"message": "Dodano"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.changes-body": {
|
||||
"message": "Twoja lokalna przesłana instalacja wyprzedza te, które zostały przesłane użytkownikom."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.changes-header": {
|
||||
"message": "Twoje zmiany nie zostały jeszcze udostępnione"
|
||||
},
|
||||
@@ -353,12 +365,21 @@
|
||||
"app.instance.admonitions.shared-instance.review-admonition-header": {
|
||||
"message": "Opublikuj aktualizację"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-description": {
|
||||
"message": "Zobacz zmienione treści, które zostaną przesłane wszystkim użytkownikom tej instalacji."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-header": {
|
||||
"message": "Sprawdź zmiany"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-update-button": {
|
||||
"message": "Sprawdź aktualizację"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.reviewing-button": {
|
||||
"message": "Trwa przegląd..."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-header": {
|
||||
"message": "Dostępna aktualizacja"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Wszystkie dane z Twojej instancji zostaną trwale usunięte, w tym Twoje światy, pliki konfiguracji i jakakolwiek dodana zawartość."
|
||||
},
|
||||
@@ -395,6 +416,9 @@
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "projekt"
|
||||
},
|
||||
"app.instance.mods.locked-content": {
|
||||
"message": "Treści w zablokowanej instalacji nie można zmienić."
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "Dodano \"{name}\""
|
||||
},
|
||||
@@ -407,6 +431,9 @@
|
||||
"app.instance.mods.successfully-uploaded": {
|
||||
"message": "Przesyłanie zakończone sukcesem"
|
||||
},
|
||||
"app.instance.share.empty.description": {
|
||||
"message": "Możesz udostępnić tę instalację znajomym!"
|
||||
},
|
||||
"app.instance.share.empty.heading": {
|
||||
"message": "Nie zaproszono żadnych znajomych"
|
||||
},
|
||||
@@ -434,9 +461,18 @@
|
||||
"app.instance.share.locked.wrong-account-heading": {
|
||||
"message": "Złe konto"
|
||||
},
|
||||
"app.instance.share.members.empty": {
|
||||
"message": "Żaden użytkownik jeszcze nie dołączył"
|
||||
},
|
||||
"app.instance.share.members.no-filter-results": {
|
||||
"message": "Nie znaleziono użytkowników pasujących do tych filtrów."
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-access": {
|
||||
"message": "Nie będzie w stanie otrzymywać aktualizacji dla tej udostępnionej instancji"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-last-user": {
|
||||
"message": "To jest ostatni użytkownik, udostępnianie zostanie wyłączone dla tej instancji"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effects-label": {
|
||||
"message": "Co się stanie?"
|
||||
},
|
||||
@@ -452,6 +488,12 @@
|
||||
"app.instance.share.sign-in.button": {
|
||||
"message": "Zaloguj się"
|
||||
},
|
||||
"app.instance.shared-instance-already-installed.body": {
|
||||
"message": "Ta przesłana instalacja jest zainstalowana jako <bold>{instanceName} </bold>. Czy na pewno chcesz zainstalować jej kopię?"
|
||||
},
|
||||
"app.instance.shared-instance-already-installed.header": {
|
||||
"message": "Przesłana instalacja jest już zainstalowana"
|
||||
},
|
||||
"app.instance.shared-instance-already-installed.install-anyway": {
|
||||
"message": "Instaluj mimo to"
|
||||
},
|
||||
@@ -461,6 +503,9 @@
|
||||
"app.instance.shared-instance-wrong-account.fallback-username": {
|
||||
"message": "połączone konto"
|
||||
},
|
||||
"app.instance.shared-instance-wrong-account.owner-admonition-body-v2": {
|
||||
"message": "aby zarządzać przesłaną instalacją, gdy to zrobisz, twoja wersja instalacji wyprzedzi instalacje zainstalowaną przez innych użytkowników."
|
||||
},
|
||||
"app.instance.shared-instance-wrong-account.sign-in-as-label": {
|
||||
"message": "Zaloguj się jako"
|
||||
},
|
||||
@@ -470,6 +515,9 @@
|
||||
"app.instance.shared-instance-wrong-account.user-admonition-body-v2": {
|
||||
"message": ", by otrzymywać aktualizacje dla tej udostępnionej instancji."
|
||||
},
|
||||
"app.instance.shared-instance-wrong-account.warning-header": {
|
||||
"message": "Korzystasz z niewłaściwego konta Modrith"
|
||||
},
|
||||
"app.instance.worlds.add-server": {
|
||||
"message": "Dodaj serwer"
|
||||
},
|
||||
@@ -483,7 +531,7 @@
|
||||
"message": "Usuń świat"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-body": {
|
||||
"message": "Ten świat zostanie trwale usunięty z tej instancji. Tej akcji nie będzie można cofnąć."
|
||||
"message": "Ten świat zostanie trwale usunięty z tej instancji. Tej akcji nie można cofnąć."
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-header": {
|
||||
"message": "Usuwanie {name}"
|
||||
@@ -501,11 +549,14 @@
|
||||
"message": "Vanilla"
|
||||
},
|
||||
"app.instance.worlds.no-worlds-description": {
|
||||
"message": "Dodaj serwer lub szukaj, aby rozpocząć"
|
||||
"message": "Dodaj serwer lub go wyszukaj, aby rozpocząć"
|
||||
},
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "Nie dodano żadnych światów ani serwerów"
|
||||
},
|
||||
"app.instance.worlds.refreshing": {
|
||||
"message": "Odświeżanie..."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "Usuń serwer"
|
||||
},
|
||||
@@ -521,9 +572,60 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Szukaj wśród {count} światów..."
|
||||
},
|
||||
"app.java-detection.cancel": {
|
||||
"message": "Anuluj"
|
||||
},
|
||||
"app.java-detection.columns.actions": {
|
||||
"message": "Akcje"
|
||||
},
|
||||
"app.java-detection.columns.path": {
|
||||
"message": "Ścieżka"
|
||||
},
|
||||
"app.java-detection.columns.version": {
|
||||
"message": "Wersja"
|
||||
},
|
||||
"app.java-detection.no-installations-found": {
|
||||
"message": "Nie znaleziono żadnych instalacji Java."
|
||||
},
|
||||
"app.java-detection.select": {
|
||||
"message": "Wybierz"
|
||||
},
|
||||
"app.java-detection.selected": {
|
||||
"message": "Wybrano"
|
||||
},
|
||||
"app.java-detection.title": {
|
||||
"message": "Wybierz instalację Java"
|
||||
},
|
||||
"app.java-selector.already-installed": {
|
||||
"message": "Już zainstalowano"
|
||||
},
|
||||
"app.java-selector.browse": {
|
||||
"message": "Przeglądaj"
|
||||
},
|
||||
"app.java-selector.detect": {
|
||||
"message": "Wykryj"
|
||||
},
|
||||
"app.java-selector.install-recommended": {
|
||||
"message": "Zainstaluj zalecane"
|
||||
},
|
||||
"app.java-selector.installing": {
|
||||
"message": "Instalowanie..."
|
||||
},
|
||||
"app.java-selector.path.placeholder": {
|
||||
"message": "/path/to/java"
|
||||
},
|
||||
"app.java-selector.test-installation": {
|
||||
"message": "Testuj instalację Java"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context": {
|
||||
"message": "Dodatkowy kontekst"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context-placeholder": {
|
||||
"message": "Jeżeli to będzie możliwe, dodaj linki i obrazki"
|
||||
},
|
||||
"app.modal.install-to-play.block-user": {
|
||||
"message": "Zablokuj użytkownika"
|
||||
},
|
||||
"app.modal.install-to-play.content-you-are-reporting": {
|
||||
"message": "Instancja, którą zgłaszasz"
|
||||
},
|
||||
@@ -545,9 +647,15 @@
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "To zaproszenie zostało utworzone przez innego użytkownika Modrinth, nie przez firmę Modrinth. Tylko akceptuj zaproszenia od osób, którym ufasz."
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning-with-creator": {
|
||||
"message": "To zaproszenie zostało utworzone przez <creator>{username}</creator>, nie przez firmę Modrinth. Akceptuj zaproszenia tylko od osób, którym ufasz."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} few {# mody} other {# modów}}"
|
||||
},
|
||||
"app.modal.install-to-play.report-description": {
|
||||
"message": "Użyj tego formularza zgłoszeniowego, aby zgłosić przypadki, które naruszają nasze <rules-link>Zasady</rules-link> albo <terms-link>Warunki Korzystania</terms-link>."
|
||||
},
|
||||
"app.modal.install-to-play.report-image-invalid-type": {
|
||||
"message": "Plik nie jest dozwolonym formatem zdjęcia"
|
||||
},
|
||||
@@ -555,28 +663,40 @@
|
||||
"message": "Plik przekracza limit rozmiaru (1MiB)"
|
||||
},
|
||||
"app.modal.install-to-play.report-legal-claims": {
|
||||
"message": "W przypadku powiadomień DMCA lub innych roszczeń prawnych zapoznaj się z naszą <copyright-link>Polityką dotyczącą praw autorskich</copyright-link>."
|
||||
"message": "W przypadku powiadomień DMCA lub innych roszczeń prawnych zapoznaj się z naszą <copyright-link>Polityką Praw Autorskich</copyright-link>."
|
||||
},
|
||||
"app.modal.install-to-play.report-reason": {
|
||||
"message": "Którą zasadę narusza ta instancja?"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.inappropriate": {
|
||||
"message": "Treści nieodpowiednie"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.malicious": {
|
||||
"message": "Złośliwe"
|
||||
"message": "Zawiera Złośliwy kod"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.spam": {
|
||||
"message": "Spam"
|
||||
},
|
||||
"app.modal.install-to-play.report-shared-instance-header": {
|
||||
"message": "Zgłoś udostępnioną instancję"
|
||||
"message": "Zgłoś przesłaną Instalacje"
|
||||
},
|
||||
"app.modal.install-to-play.report-submitted": {
|
||||
"message": "Zgłoszenie przesłane"
|
||||
},
|
||||
"app.modal.install-to-play.report-support-and-bugs": {
|
||||
"message": "W przypadku pytań technicznych prosimy o kontakt z <support-link>Zespołem Obsługi Klienta</support-link>. Aby, zgłosić błąd wejdź na <github-link>GitHub issue</github-link>."
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "Plik jest sprawdzony tylko, jeżeli został opublikowany na Modrinth, niezależnie od jego formatu (w tym pliki .mrpack)."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Wspólna instancja"
|
||||
"message": "Przesłana Instalacja"
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance-content": {
|
||||
"message": "Treści w przesłanej ci instalacji"
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance-unknown-files-description": {
|
||||
"message": "Ta udostępniona instancja zawiera pliki, które nie zostały opublikowane na Modrinth. Zalecamy instalowanie plików tylko ze źródeł, którym ufasz."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Ta serwerowa paczka modów zawiera pliki, które nie zostały opublikowane na Modrinth. Zalecamy instalowanie plików tylko ze źródeł, którym ufasz."
|
||||
@@ -587,6 +707,9 @@
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Nieznane plki"
|
||||
},
|
||||
"app.modal.install-to-play.user-blocked": {
|
||||
"message": "Zablokowano użytkownika"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Pokaż zawartość"
|
||||
},
|
||||
@@ -603,7 +726,7 @@
|
||||
"message": "Usunięto"
|
||||
},
|
||||
"app.modal.update-to-play.shared-instance-unknown-files-description": {
|
||||
"message": "Ta aktualizacja udostępnionej instancji zawiera pliki, które nie zostały opublikowane na Modrinth. Zalecamy instalowanie plików tylko z źródeł, którym ufasz."
|
||||
"message": "Ta aktualizacja udostępnionej instancji zawiera pliki, które nie zostały opublikowane na Modrinth. Zalecamy instalowanie plików tylko ze źródeł, którym ufasz."
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Wymagana jest aktualizacja"
|
||||
@@ -611,6 +734,36 @@
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Aktualizacja jest wymagana, by grać w {name}. Zaktualizuj do najnowszej wersji, aby uruchomić grę."
|
||||
},
|
||||
"app.nav.create-new-instance": {
|
||||
"message": "Utwórz instancję"
|
||||
},
|
||||
"app.nav.home": {
|
||||
"message": "Strona główna"
|
||||
},
|
||||
"app.nav.library": {
|
||||
"message": "Biblioteka"
|
||||
},
|
||||
"app.nav.modrinth-account": {
|
||||
"message": "Konto Modrinth"
|
||||
},
|
||||
"app.nav.modrinth-hosting": {
|
||||
"message": "Modrinth Hosting"
|
||||
},
|
||||
"app.nav.sign-in-to-modrinth-account": {
|
||||
"message": "Zaloguj się na konto Modrinth"
|
||||
},
|
||||
"app.nav.signed-in-as": {
|
||||
"message": "Zalogowano jako <user>{username}</user>"
|
||||
},
|
||||
"app.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Ulepsz do Modrinth+"
|
||||
},
|
||||
"app.news.title": {
|
||||
"message": "Aktualności"
|
||||
},
|
||||
"app.news.view-all": {
|
||||
"message": "Zobacz wszystkie aktualności"
|
||||
},
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Ten projekt jest już zainstalowany"
|
||||
},
|
||||
@@ -620,6 +773,9 @@
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Powróć do odkrywania"
|
||||
},
|
||||
"app.project.install-context.back-to-instance": {
|
||||
"message": "Powrót do instancji"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Wszystkie wersje"
|
||||
},
|
||||
@@ -632,20 +788,107 @@
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Już zainstalowano"
|
||||
},
|
||||
"app.restarting": {
|
||||
"message": "Uruchamianie ponowne..."
|
||||
},
|
||||
"app.settings.app-version": {
|
||||
"message": "Modrinth App {version}"
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.title": {
|
||||
"message": "Zmienne środowiskowe"
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.title": {
|
||||
"message": "Pełny ekran"
|
||||
},
|
||||
"app.settings.default-instance-options.height.description": {
|
||||
"message": "Wysokość okna gry po uruchomieniu."
|
||||
},
|
||||
"app.settings.default-instance-options.height.placeholder": {
|
||||
"message": "Wprowadź wysokość..."
|
||||
},
|
||||
"app.settings.default-instance-options.height.title": {
|
||||
"message": "Wysokość"
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.placeholder": {
|
||||
"message": "Wprowadź argumenty Java..."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.title": {
|
||||
"message": "Argumenty Java"
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.description": {
|
||||
"message": "Maksymalna ilość pamięci dostępna dla każdej instancji."
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.title": {
|
||||
"message": "Przypisanie pamięci"
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.description": {
|
||||
"message": "Aktywowane po zamknięciu gry."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.placeholder": {
|
||||
"message": "Wprowadź komendę po zamknięciu..."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.title": {
|
||||
"message": "Komenda po zamknięciu"
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.description": {
|
||||
"message": "Aktywowane przed uruchomieniem instancji."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.placeholder": {
|
||||
"message": "Wpisz komendę przed uruchomieniem..."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.title": {
|
||||
"message": "Komenda przed uruchomieniem"
|
||||
},
|
||||
"app.settings.default-instance-options.width.description": {
|
||||
"message": "Szerokość okna gry po uruchomieniu."
|
||||
},
|
||||
"app.settings.default-instance-options.width.placeholder": {
|
||||
"message": "Wprowadź szerokość..."
|
||||
},
|
||||
"app.settings.default-instance-options.width.title": {
|
||||
"message": "Szerokość"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Tryb dewelopera włączony."
|
||||
},
|
||||
"app.settings.downloading": {
|
||||
"message": "Pobieranie v{version}"
|
||||
},
|
||||
"app.settings.java-installations.location.title": {
|
||||
"message": "Ścieżka do Java {version, number}"
|
||||
},
|
||||
"app.settings.operating-system.macos": {
|
||||
"message": "macOS"
|
||||
},
|
||||
"app.settings.privacy.ads-consent.intro": {
|
||||
"message": "Reklamy pozwalają Modrinth oraz fundują wypłaty twórców. Nasi partnerzy mogą zachować lub uzyskać dostęp ciasteczek w aplikacji, żeby spersonalizować reklamy i zmierzyć wydajność. Możesz optować lub zarządzać preferencjami poniżej."
|
||||
"message": "Reklamy pozwalają na dalsze działanie Modrinth i finansują dochody dla twórców. Nasi partnerzy mogą gromadzić albo uzyskiwać dostęp do plików cookies w celu personalizacji reklam i mierzenia skuteczności."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.description": {
|
||||
"message": "Pokazuj Modrinth App jako aktywność na Discord. Nie wpływa to na Rich Presence dodane do instancji przez mody. Wymaga ponownego uruchomienia aplikacji."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.title": {
|
||||
"message": "Discord Rich Presence"
|
||||
},
|
||||
"app.settings.privacy.telemetry.title": {
|
||||
"message": "Telemetria"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.description": {
|
||||
"message": "Ilość plików, które aplikacja może pobierać na raz. Zmniejsz tę wartość, jeśli pobieranie jest niestabilne. Wymaga ponownego uruchomienia aplikacji."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.description": {
|
||||
"message": "Ilość plików, które aplikacja może zapisywać na dysku na raz. Zmniejsz tę wartość, jeśli często występują błędy wejścia/wyjścia. Wymaga ponownego uruchomienia aplikacji."
|
||||
},
|
||||
"app.settings.sidebar.label.instances": {
|
||||
"message": "Instancje"
|
||||
},
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Wygląd"
|
||||
},
|
||||
"app.settings.tabs.behavior": {
|
||||
"message": "Zachowanie"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Domyślne opcje instancji"
|
||||
"message": "Domyślne opcje gry"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Instalacje Java"
|
||||
@@ -659,6 +902,9 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "Zarządzanie zasobami"
|
||||
},
|
||||
"app.sidebar.playing-as": {
|
||||
"message": "Graj jako"
|
||||
},
|
||||
"app.skins.add-button": {
|
||||
"message": "Dodaj skórkę"
|
||||
},
|
||||
@@ -681,10 +927,10 @@
|
||||
"message": "Nie udało się odczytać upuszczonego pliku."
|
||||
},
|
||||
"app.skins.dropped-file-error.title": {
|
||||
"message": "Błąd podczas przetwarzania pliku"
|
||||
"message": "Błąd przetwarzania pliku"
|
||||
},
|
||||
"app.skins.ears-feature-notice": {
|
||||
"message": "Ta skórka używa funkcjonalności modyfikacji {ears}"
|
||||
"message": "Ta skórka używa modyfikacji {ears}"
|
||||
},
|
||||
"app.skins.edit-button": {
|
||||
"message": "Edytuj skórkę"
|
||||
@@ -699,10 +945,10 @@
|
||||
"message": "Styl ramion"
|
||||
},
|
||||
"app.skins.modal.arm-style-slim": {
|
||||
"message": "Smukły"
|
||||
"message": "Smukłe"
|
||||
},
|
||||
"app.skins.modal.arm-style-wide": {
|
||||
"message": "Szeroki"
|
||||
"message": "Szerokie"
|
||||
},
|
||||
"app.skins.modal.cape-fallback-name": {
|
||||
"message": "Peleryna"
|
||||
@@ -818,6 +1064,15 @@
|
||||
"app.skins.toggle-ears-features-on": {
|
||||
"message": "Włącz"
|
||||
},
|
||||
"app.survey.no-thanks": {
|
||||
"message": "Nie, dziękuję"
|
||||
},
|
||||
"app.survey.take-survey": {
|
||||
"message": "Weź udział w ankiecie"
|
||||
},
|
||||
"app.survey.title": {
|
||||
"message": "Cześć, użytkowniku Modrinth!"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Wersja Modrinth App v{version} została pobrana. Załaduj ponownie, żeby zaktualizować teraz, albo automatycznie, gdy zamkniesz Modrinth App."
|
||||
},
|
||||
@@ -848,6 +1103,9 @@
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "Wersja {version} została pomyślnie zainstalowana!"
|
||||
},
|
||||
"app.user.project.install-to-instance": {
|
||||
"message": "Zainstaluj do instancji"
|
||||
},
|
||||
"app.world.server-modal.placeholder-address": {
|
||||
"message": "example.modrinth.gg"
|
||||
},
|
||||
@@ -947,6 +1205,33 @@
|
||||
"installation-settings.shared-instance.linked-title": {
|
||||
"message": "Powiązana udostępniona instancja"
|
||||
},
|
||||
"installation-settings.shared-instance.title": {
|
||||
"message": "Wycofaj instancję"
|
||||
},
|
||||
"installation-settings.shared-instance.unlink-button": {
|
||||
"message": "Odłącz udostępnioną instancję"
|
||||
},
|
||||
"installation-settings.shared-instance.unlink-description": {
|
||||
"message": "Odłącz lokalną instancję od aktualizacji z udostępnionej instancji."
|
||||
},
|
||||
"installation-settings.shared-instance.unlinking-button": {
|
||||
"message": "Odłączanie..."
|
||||
},
|
||||
"installation-settings.shared-instance.unpublish-button": {
|
||||
"message": "Wycofaj udostępnioną instancję"
|
||||
},
|
||||
"installation-settings.shared-instance.unpublish-description": {
|
||||
"message": "Usuń tę udostępnioną instancję z Modrinth i przestań wysyłać aktualizacje do użytkowników, którym jest udostępniona. Nie wpłynie to na twoją lokalną instancję."
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.admonition-body": {
|
||||
"message": "Spowoduje to usunięcie przesyłanej instalacji z serwerów Modrith. Użytkownicy korzystający z niej na Modrinth App przestaną otrzymywać aktualizacje, ale twoja lokalna instalacja zostanie na tym urządzeniu."
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.admonition-header": {
|
||||
"message": "Wycofywanie udostępnionej instancji"
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.header": {
|
||||
"message": "Wycofaj udostępnioną instancję"
|
||||
},
|
||||
"instance.action.create-shortcut": {
|
||||
"message": "Utwórz skrót"
|
||||
},
|
||||
@@ -1016,6 +1301,9 @@
|
||||
"instance.files.save-as": {
|
||||
"message": "Zapisz jako..."
|
||||
},
|
||||
"instance.locked.delete-button": {
|
||||
"message": "Usuń instancję"
|
||||
},
|
||||
"instance.playtime.never-played": {
|
||||
"message": "Nigdy nie grano"
|
||||
},
|
||||
@@ -1031,6 +1319,21 @@
|
||||
"instance.server-modal.resource-pack": {
|
||||
"message": "Paczka zasobów"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.actions": {
|
||||
"message": "Akcje"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.expires": {
|
||||
"message": "Wygasa"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.title": {
|
||||
"message": "Aktywne zaproszenia"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.uses": {
|
||||
"message": "Użyć"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-header": {
|
||||
"message": "Tej akcji nie można cofnąć"
|
||||
},
|
||||
"instance.settings.tabs.general": {
|
||||
"message": "Ogólne"
|
||||
},
|
||||
@@ -1361,9 +1664,6 @@
|
||||
"minecraft-required.sign-in": {
|
||||
"message": "Zaloguj się do Microsoft"
|
||||
},
|
||||
"modal.modrinth-account-required.cancel-button": {
|
||||
"message": "Anuluj"
|
||||
},
|
||||
"modal.modrinth-account-required.continue-in-browser-heading": {
|
||||
"message": "Kontynuuj w przeglądarce"
|
||||
},
|
||||
@@ -1382,6 +1682,15 @@
|
||||
"modal.modrinth-account-required.sign-in-heading": {
|
||||
"message": "Zaloguj się na konto Modrinth"
|
||||
},
|
||||
"modal.modrinth-account-required.signing-in-header": {
|
||||
"message": "Trwa logowanie"
|
||||
},
|
||||
"modal.modrinth-account-required.support-prompt": {
|
||||
"message": "Masz problem z logowaniem? Skorzystaj z <support>Obsługi klienta</support>"
|
||||
},
|
||||
"modal.modrinth-account-required.waiting-for-browser": {
|
||||
"message": "Oczekiwanie na twoje potwierdzenie..."
|
||||
},
|
||||
"search.filter.locked.instance": {
|
||||
"message": "Podane przez instancję"
|
||||
},
|
||||
@@ -1405,5 +1714,11 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader jest dostarczony przez serwer"
|
||||
},
|
||||
"settings.sidebar.label.account": {
|
||||
"message": "Konto"
|
||||
},
|
||||
"settings.sidebar.label.display": {
|
||||
"message": "Wyświetlanie"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
"message": "Cancelado"
|
||||
},
|
||||
"app.action-bar.install.summary.cleanup-incomplete": {
|
||||
"message": "A limpeza não foi finalizada"
|
||||
"message": "A limpeza não foi concluída"
|
||||
},
|
||||
"app.action-bar.install.summary.content-download-failed": {
|
||||
"message": "Não foi possível baixar os arquivos"
|
||||
@@ -48,10 +48,10 @@
|
||||
"message": "Não foi possível salvar os arquivos"
|
||||
},
|
||||
"app.action-bar.install.summary.download-failed": {
|
||||
"message": "A transferência não foi finalizada"
|
||||
"message": "O download não foi concluído"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "Instância não encontrada"
|
||||
"message": "A instância não foi encontrada"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "O caminho do arquivo é inválido"
|
||||
@@ -102,7 +102,7 @@
|
||||
"message": "Nenhuma instância em execução"
|
||||
},
|
||||
"app.action-bar.offline": {
|
||||
"message": "Inativo"
|
||||
"message": "Offline"
|
||||
},
|
||||
"app.action-bar.primary-instance": {
|
||||
"message": "Instância principal"
|
||||
@@ -144,19 +144,19 @@
|
||||
"message": "Sua privacidade e como anúncios apoiam o Modrinth"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Ativa a renderização avançada, como desfoque que talvez afete o desempenho sem renderização acelerada do hardware."
|
||||
"message": "Ativa os efeitos visuais como o desfoque de fundo. Isso talvez reduza o desempenho sem o aceleramento de hardware."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Renderização avançada"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "Escolha seu tema de cores preferido para o Modrinth App."
|
||||
"message": "Escolha o tema usado pelo Modrinth App."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Tema de cores"
|
||||
"message": "Tema"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Altera a página que o launcher é aberto."
|
||||
"message": "Escolha a página exibida ao abrir o Modrinth App."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Início"
|
||||
@@ -168,59 +168,68 @@
|
||||
"message": "Página inicial padrão"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Desativa o nametag acima do seu jogador na página de Skins."
|
||||
"message": "Oculta sua nametag acima do jogador na página de seleção de skin."
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Ocultar nametag"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Inclui mundos recentes na seção \"Retomar\" na página inicial."
|
||||
"message": "Exibe os mundos jogados recentemente na seção \"Volte aos mundos\" na página inicial."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Retomar aos mundos"
|
||||
"message": "Volte aos mundos"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Minimize o launcher assim que algum processo do Minecraft iniciar."
|
||||
"message": "Minimiza o Modrinth App ao iniciar o Minecraft."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Minimizar launcher"
|
||||
"message": "Minimizar aplicativo"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Usar molduras de janela do sistema (exige reinicialização do aplicativo)."
|
||||
"message": "Usa a barra de título e os controles de janela do seu sistema operacional. Exige a reinicialização do aplicativo."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Decorações nativas"
|
||||
"message": "Moldura de janela do sistema"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Exibe a quantidade de tempo jogado de uma instância."
|
||||
"message": "Exibe o tempo de jogo de cada instância."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Exibir tempo jogado"
|
||||
"message": "Exibir tempo de jogo"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Pula automaticamente as confirmações desnecessárias como duplica de instalação de pacotes de mods, exclusão de conteúdo normal, atualizações em massa, desvinculo de pacotes de mods e diálogos de reparo. Os avisos de perigo ainda serão exibidos."
|
||||
"message": "Ignora as confirmações para ações de baixo risco como instalações duplicadas, exclusão de conteúdo normal, atualizações em massa, desvinculação e reparos. Os avisos para ações perigosas sempre são mostrados."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Ignorar avisos desnecessários"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Permite alternar a barra lateral."
|
||||
"message": "Oculta a barra lateral direita por padrão e adiciona um botão para mostrar ou ocultar."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Alternar barra lateral"
|
||||
"message": "Ocultar barra lateral direita"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Se você tentar instalar um arquivo Modrinth Pack (.mrpack) não hospedado no Modrinth, garantiremos que você entenda os riscos antes de instalar."
|
||||
"message": "Exibe um aviso de segurança ao instalar um Modrinth Pack (.mrpack) que não seja hospedado no Modrinth."
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.title": {
|
||||
"message": "Avise-me antes de instalar pacotes de mods desconhecidos"
|
||||
},
|
||||
"app.auth-servers.unreachable.body": {
|
||||
"message": "Os servidores de autenticação do Minecraft podem estar indisponíveis no momento. Verifique sua conexão com a rede e tente novamente mais tarde."
|
||||
"message": "Os servidores de autenticação do Minecraft talvez estejam indisponíveis no momento. Verifique sua conexão com a internet e tente novamente mais tarde."
|
||||
},
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Não foi possível acessar os servidores de autenticação"
|
||||
},
|
||||
"app.behavior-settings.confirmations.title": {
|
||||
"message": "Confirmações"
|
||||
},
|
||||
"app.behavior-settings.content.title": {
|
||||
"message": "Início e conteúdo"
|
||||
},
|
||||
"app.behavior-settings.startup-and-navigation.title": {
|
||||
"message": "Inicialização e navegação"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "Adicionando servidor à instância"
|
||||
},
|
||||
@@ -242,12 +251,18 @@
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "Voltar à instância"
|
||||
},
|
||||
"app.browse.discover-project-type": {
|
||||
"message": "Descobrir {projectType}"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Descobrir servidores"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Ocultar servidores já adicionados"
|
||||
},
|
||||
"app.browse.hide-installed-modpacks": {
|
||||
"message": "Ocultar já instalado"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Pacotes de mods"
|
||||
},
|
||||
@@ -345,7 +360,7 @@
|
||||
"message": "Suas alterações ainda não foram compartilhadas"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.publish-button": {
|
||||
"message": "Atualização de publicação"
|
||||
"message": "Publicar atualização"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.publishing-button": {
|
||||
"message": "Publicando..."
|
||||
@@ -354,7 +369,7 @@
|
||||
"message": "Removido"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-admonition-header": {
|
||||
"message": "Atualização de publicação"
|
||||
"message": "Publicar atualização"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-description": {
|
||||
"message": "Revise as alterações de conteúdo que serão compartilhadas com todos os usuários desta instância."
|
||||
@@ -362,9 +377,18 @@
|
||||
"app.instance.admonitions.shared-instance.review-header": {
|
||||
"message": "Revisar alterações"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-update-button": {
|
||||
"message": "Revisar atualização"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.reviewing-button": {
|
||||
"message": "Revisando..."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-body": {
|
||||
"message": "Uma atualização é necessária para jogar {name}. Atualize para a versão mais recente para iniciar o jogo."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-header": {
|
||||
"message": "Uma atualização está disponível"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Todos os dados para sua instância serão excluídos permanentemente, incluindo seus mundos, configs e todo o conteúdo instalado."
|
||||
},
|
||||
@@ -431,6 +455,9 @@
|
||||
"app.instance.share.invite-modal.heading": {
|
||||
"message": "Compartilhar {name}"
|
||||
},
|
||||
"app.instance.share.invite-modal.user-limit-reached": {
|
||||
"message": "Esta instância já alcançou limite de usuários de {limit}."
|
||||
},
|
||||
"app.instance.share.locked.empty-description-prefix": {
|
||||
"message": "Você precisa iniciar sessão como"
|
||||
},
|
||||
@@ -449,6 +476,12 @@
|
||||
"app.instance.share.locked.wrong-account-heading": {
|
||||
"message": "Conta errada"
|
||||
},
|
||||
"app.instance.share.members.empty": {
|
||||
"message": "Nenhum usuário entrou ainda"
|
||||
},
|
||||
"app.instance.share.members.no-filter-results": {
|
||||
"message": "Nenhum usuário corresponde seus filtros."
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-access": {
|
||||
"message": "Eles não receberão mais atualizações para esta instância compartilhada"
|
||||
},
|
||||
@@ -479,6 +512,12 @@
|
||||
"app.instance.share.sign-in.button": {
|
||||
"message": "Iniciar sessão"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.description": {
|
||||
"message": "O serviço de instâncias compartilhadas não está acessível no momento, tente novamente mais tarde"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.heading": {
|
||||
"message": "Não foi possível conectar"
|
||||
},
|
||||
"app.instance.share.unlink.body": {
|
||||
"message": "Você precisa desvincular este pacote de mods para compartilhar sua instância"
|
||||
},
|
||||
@@ -537,7 +576,7 @@
|
||||
"message": "Modificado"
|
||||
},
|
||||
"app.instance.worlds.filter-offline": {
|
||||
"message": "Inativo"
|
||||
"message": "Offline"
|
||||
},
|
||||
"app.instance.worlds.filter-online": {
|
||||
"message": "Ativo"
|
||||
@@ -551,6 +590,9 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "Nenhum servidor ou mundo adicionado"
|
||||
},
|
||||
"app.instance.worlds.refreshing": {
|
||||
"message": "Recarregando..."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "Remover servidor"
|
||||
},
|
||||
@@ -566,12 +608,60 @@
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Buscar {count} mundos..."
|
||||
},
|
||||
"app.java-detection.cancel": {
|
||||
"message": "Cancelar"
|
||||
},
|
||||
"app.java-detection.columns.actions": {
|
||||
"message": "Ações"
|
||||
},
|
||||
"app.java-detection.columns.path": {
|
||||
"message": "Caminho"
|
||||
},
|
||||
"app.java-detection.columns.version": {
|
||||
"message": "Versão"
|
||||
},
|
||||
"app.java-detection.no-installations-found": {
|
||||
"message": "Nenhuma instalação Java encontrada."
|
||||
},
|
||||
"app.java-detection.select": {
|
||||
"message": "Selecionar"
|
||||
},
|
||||
"app.java-detection.selected": {
|
||||
"message": "Selecionado"
|
||||
},
|
||||
"app.java-detection.title": {
|
||||
"message": "Selecionar instalação Java"
|
||||
},
|
||||
"app.java-selector.already-installed": {
|
||||
"message": "Já instalado"
|
||||
},
|
||||
"app.java-selector.browse": {
|
||||
"message": "Navegar"
|
||||
},
|
||||
"app.java-selector.detect": {
|
||||
"message": "Detectar"
|
||||
},
|
||||
"app.java-selector.install-recommended": {
|
||||
"message": "Instalação recomendada"
|
||||
},
|
||||
"app.java-selector.installing": {
|
||||
"message": "Instalando..."
|
||||
},
|
||||
"app.java-selector.path.placeholder": {
|
||||
"message": "/caminho/ao/java"
|
||||
},
|
||||
"app.java-selector.test-installation": {
|
||||
"message": "Instalação de teste Java"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context": {
|
||||
"message": "Contexto adicional"
|
||||
},
|
||||
"app.modal.install-to-play.additional-context-placeholder": {
|
||||
"message": "Incluir links e imagens se possível e relevante"
|
||||
},
|
||||
"app.modal.install-to-play.block-user": {
|
||||
"message": "Bloquear usuário"
|
||||
},
|
||||
"app.modal.install-to-play.content-you-are-reporting": {
|
||||
"message": "Instância que está denunciando"
|
||||
},
|
||||
@@ -593,6 +683,9 @@
|
||||
"app.modal.install-to-play.invite-warning": {
|
||||
"message": "Este convite foi criado por outro usuário do Modrinth, não pelo próprio Modrinth. Só aceite convites de pessoas que você confia."
|
||||
},
|
||||
"app.modal.install-to-play.invite-warning-with-creator": {
|
||||
"message": "Este convite foi criado por <creator>{username}</creator>, não pelo Modrinth. Aceite apenas convites de pessoas que você confia."
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, =0 {Nenhum mod} one {# mod} other {# mods}}"
|
||||
},
|
||||
@@ -650,6 +743,9 @@
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Arquivos não reconhecidos"
|
||||
},
|
||||
"app.modal.install-to-play.user-blocked": {
|
||||
"message": "Usuário bloqueado"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Ver conteúdo"
|
||||
},
|
||||
@@ -677,6 +773,36 @@
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Uma atualização é necessária para jogar {name}. Atualize para a versão mais recente para iniciar o jogo."
|
||||
},
|
||||
"app.nav.create-new-instance": {
|
||||
"message": "Criar instância nova"
|
||||
},
|
||||
"app.nav.home": {
|
||||
"message": "Início"
|
||||
},
|
||||
"app.nav.library": {
|
||||
"message": "Biblioteca"
|
||||
},
|
||||
"app.nav.modrinth-account": {
|
||||
"message": "Conta Modrinth"
|
||||
},
|
||||
"app.nav.modrinth-hosting": {
|
||||
"message": "Modrinth Hosting"
|
||||
},
|
||||
"app.nav.sign-in-to-modrinth-account": {
|
||||
"message": "Iniciar sessão em uma conta Modrinth"
|
||||
},
|
||||
"app.nav.signed-in-as": {
|
||||
"message": "Conectado como <user>{username}</user>"
|
||||
},
|
||||
"app.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Assinar o Modrinth+"
|
||||
},
|
||||
"app.news.title": {
|
||||
"message": "Notícias"
|
||||
},
|
||||
"app.news.view-all": {
|
||||
"message": "Ver todas as notícias"
|
||||
},
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Este projeto já foi instalado"
|
||||
},
|
||||
@@ -686,6 +812,9 @@
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Voltar a descobrir"
|
||||
},
|
||||
"app.project.install-context.back-to-instance": {
|
||||
"message": "Voltar à instância"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Todas as versões"
|
||||
},
|
||||
@@ -698,23 +827,191 @@
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Já instalado"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-show-tooltip": {
|
||||
"message": "Arraste para exibir instâncias recentes"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-tooltip": {
|
||||
"message": "Arraste para redimensionar"
|
||||
},
|
||||
"app.restarting": {
|
||||
"message": "Reiniciando..."
|
||||
},
|
||||
"app.settings.app-version": {
|
||||
"message": "Modrinth App {version}"
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.description": {
|
||||
"message": "As variáveis do ambiente definidas ao iniciar uma instância."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.placeholder": {
|
||||
"message": "Insira as variáveis do ambiente..."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.title": {
|
||||
"message": "Variáveis de ambiente"
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.description": {
|
||||
"message": "Inicia as instâncias em tela cheia ao atualizar o arquivo options.txt."
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.title": {
|
||||
"message": "Tela cheia"
|
||||
},
|
||||
"app.settings.default-instance-options.height.description": {
|
||||
"message": "A altura da janela ao iniciar o jogo."
|
||||
},
|
||||
"app.settings.default-instance-options.height.placeholder": {
|
||||
"message": "Insira a altura..."
|
||||
},
|
||||
"app.settings.default-instance-options.height.title": {
|
||||
"message": "Altura"
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.description": {
|
||||
"message": "Os argumentos passados para o Java ao iniciar uma instância."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.placeholder": {
|
||||
"message": "Insira os argumentos Java..."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.title": {
|
||||
"message": "Argumentos Java"
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.description": {
|
||||
"message": "O máximo de memória disponível para cada instância."
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.title": {
|
||||
"message": "Alocação de memória"
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.description": {
|
||||
"message": "Executa após o jogo fechar."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.placeholder": {
|
||||
"message": "Insira o comando ao sair..."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.title": {
|
||||
"message": "Hook ao sair"
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.description": {
|
||||
"message": "Executa antes da instância iniciar."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.placeholder": {
|
||||
"message": "Insira o comando ao iniciar..."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.title": {
|
||||
"message": "Hook ao iniciar"
|
||||
},
|
||||
"app.settings.default-instance-options.width.description": {
|
||||
"message": "A largura da janela ao iniciar o jogo."
|
||||
},
|
||||
"app.settings.default-instance-options.width.placeholder": {
|
||||
"message": "Insira a largura..."
|
||||
},
|
||||
"app.settings.default-instance-options.width.title": {
|
||||
"message": "Largura"
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.description": {
|
||||
"message": "O comando usado para auxiliar o processo de inicialização do Minecraft."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.placeholder": {
|
||||
"message": "Insira um comando auxiliar..."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.title": {
|
||||
"message": "Hook auxiliar"
|
||||
},
|
||||
"app.settings.developer-mode-button.label": {
|
||||
"message": "Alternar modo desenvolvedor"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Modo desenvolvedor ativado."
|
||||
},
|
||||
"app.settings.downloading": {
|
||||
"message": "Baixando v{version}"
|
||||
},
|
||||
"app.settings.java-installations.location.title": {
|
||||
"message": "Localização Java {version, number}"
|
||||
},
|
||||
"app.settings.operating-system.macos": {
|
||||
"message": "macOS"
|
||||
},
|
||||
"app.settings.privacy.ads-consent.intro": {
|
||||
"message": "Anúncios tornam o Modrinth possível e financiam os pagamentos dos criadores. Nossos parceiros talvez armazenem ou acessem os cookies no aplicativo para personalizar anúncios e medir o desempenho. Você pode recusar ou gerenciar suas preferências abaixo."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.description": {
|
||||
"message": "Exibe o Modrinth App como sua atividade atual no Discord. Isso não afeta a Presença Rica adicionada às instâncias por mods. Exige a reinicialização do aplicativo."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.title": {
|
||||
"message": "Presença Rica do Discord"
|
||||
},
|
||||
"app.settings.privacy.telemetry.description": {
|
||||
"message": "O Modrinth coleta analíticas anonimizadas e uso de dados para aprimorar nossa experiência de usuário e personalizar sua experiência. Ao desativar esta opção, você negará e seus dados não serão mais coletados."
|
||||
},
|
||||
"app.settings.privacy.telemetry.title": {
|
||||
"message": "Telemetria"
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.description": {
|
||||
"message": "Exibe a ação de copiar detalhes caso uma instalação esteja na fila ou em execução. Essa opção está sempre disponível para instalações interrompidas ou falhas."
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.title": {
|
||||
"message": "Sempre exibir copiar detalhes"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.description": {
|
||||
"message": "O aplicativo talvez carregue mais lentamente até o cache ser refeito."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.title": {
|
||||
"message": "Purgar cache do aplicativo?"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.description": {
|
||||
"message": "Limpe o dado cache e baixe-o novamente do Modrinth. O aplicativo talvez carregue mais lentamente até o cache ser refeito."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.purge": {
|
||||
"message": "Purgar cache"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.title": {
|
||||
"message": "Cache do aplicativo"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.description": {
|
||||
"message": "Os backups dos dados de aplicativos importantes são armazenados aqui caso você precise recuperá-los depois."
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.open-folder": {
|
||||
"message": "Abrir pasta de backups"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.title": {
|
||||
"message": "Backups do banco de dados do aplicativo"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.browse": {
|
||||
"message": "Buscar por um diretório de aplicativo"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.description": {
|
||||
"message": "Onde o Modrinth App armazena as instâncias e outros arquivos. As mudanças serão aplicadas após reiniciar o aplicativo."
|
||||
},
|
||||
"app.settings.resource-management.app-directory.select": {
|
||||
"message": "Selecione um novo diretório de aplicativo"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.title": {
|
||||
"message": "Diretório de aplicativo"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.description": {
|
||||
"message": "O número de arquivos que o aplicativo pode baixar de uma só vez. Reduza se os downloads causam instabilidade em sua conexão. Exige a reinicialização do aplicativo."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.title": {
|
||||
"message": "Máximo de downloads simultâneos"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.description": {
|
||||
"message": "O número de arquivos que o aplicativo pode escrever no disco de uma só vez. Reduza caso você se depara com erros I/O frequentemente. Exige a reinicialização do aplicativo."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.title": {
|
||||
"message": "Máximo de escritas simultâneas"
|
||||
},
|
||||
"app.settings.sidebar.label.instances": {
|
||||
"message": "Instâncias"
|
||||
},
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Aparência"
|
||||
},
|
||||
"app.settings.tabs.behavior": {
|
||||
"message": "Comportamento"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Opções da instância"
|
||||
"message": "Configurações padrão do jogo"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Instalações do Java"
|
||||
"message": "Instalações Java"
|
||||
},
|
||||
"app.settings.tabs.language": {
|
||||
"message": "Idioma"
|
||||
@@ -725,6 +1022,9 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "Gerenciamento de recursos"
|
||||
},
|
||||
"app.sidebar.playing-as": {
|
||||
"message": "Jogando como"
|
||||
},
|
||||
"app.skins.add-button": {
|
||||
"message": "Adicionar skin"
|
||||
},
|
||||
@@ -884,6 +1184,21 @@
|
||||
"app.skins.toggle-ears-features-on": {
|
||||
"message": "Ativar"
|
||||
},
|
||||
"app.survey.body": {
|
||||
"message": "Você se importaria de responder algumas perguntas sobre sua experiência com o Modrinth App?"
|
||||
},
|
||||
"app.survey.footer": {
|
||||
"message": "Este comentário vai diretamente para a equipe Modrinth e ajudará a guiar futuras atualizações!"
|
||||
},
|
||||
"app.survey.no-thanks": {
|
||||
"message": "Não, obrigado"
|
||||
},
|
||||
"app.survey.take-survey": {
|
||||
"message": "Responder"
|
||||
},
|
||||
"app.survey.title": {
|
||||
"message": "Ei, usuário do Modrinth!"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "O Modrinth App v{version} já foi instalado. Recarregue para atualizar agora ou ela será feita automaticamente ao fechar o Modrinth App."
|
||||
},
|
||||
@@ -914,6 +1229,9 @@
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "Versão {version} instalada!"
|
||||
},
|
||||
"app.user.project.install-to-instance": {
|
||||
"message": "Instalar para instância"
|
||||
},
|
||||
"app.world.server-modal.placeholder-address": {
|
||||
"message": "exemplo.modrinth.gg"
|
||||
},
|
||||
@@ -927,10 +1245,10 @@
|
||||
"message": "Ainda não jogado"
|
||||
},
|
||||
"app.world.world-item.offline": {
|
||||
"message": "Inativo"
|
||||
"message": "Offline"
|
||||
},
|
||||
"app.world.world-item.players-online": {
|
||||
"message": "{count} ativo(s)"
|
||||
"message": "{count} online"
|
||||
},
|
||||
"content.shared-instance.change-version-body": {
|
||||
"message": "Alterar a versão modifica apenas a sua cópia local. Atualizações futuras da instância compartilhada podem restaurá-la ou alterá-la novamente."
|
||||
@@ -1160,6 +1478,45 @@
|
||||
"instance.server-modal.resource-pack": {
|
||||
"message": "Pacote de recursos"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.actions": {
|
||||
"message": "Ações"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.code": {
|
||||
"message": "Link de convite"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.description": {
|
||||
"message": "Qualquer um com algum desses links de convite pode entrar enquanto permanecem ativos."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.empty": {
|
||||
"message": "Não há nenhum convite ativo."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.expires": {
|
||||
"message": "Expira"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke": {
|
||||
"message": "Revogar convite"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.revoke-with-code": {
|
||||
"message": "Revogar convite {code}"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.title": {
|
||||
"message": "Convites ativos"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.uses": {
|
||||
"message": "Usos"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-body": {
|
||||
"message": "Este link de convite <monospace>{code}</monospace> deixará de funcionar imediatamente. As pessoas que já entraram ainda permanecerão com acesso."
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-header": {
|
||||
"message": "Esta ação não pode ser desfeita"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.confirm": {
|
||||
"message": "Revogar convite"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.header": {
|
||||
"message": "Revogar convite"
|
||||
},
|
||||
"instance.settings.tabs.general": {
|
||||
"message": "Geral"
|
||||
},
|
||||
@@ -1268,6 +1625,27 @@
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Ações de inicialização do jogo"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.description": {
|
||||
"message": "Hooks são executados no diretório de trabalho da instância, com as seguintes variáveis:"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-dir.description": {
|
||||
"message": "$INST_DIR: O caminho absoluto para a pasta da instância"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-id.description": {
|
||||
"message": "$INST_ID: O nome da pasta da instância"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java-args.description": {
|
||||
"message": "$INST_JAVA_ARGS: Os argumentos JVM fornecidos ao jogo"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java.description": {
|
||||
"message": "$INST_JAVA: O caminho absoluto ao binário Java"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-mc-dir.description": {
|
||||
"message": "$INST_MC_DIR: um apelido de $INST_DIR"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-name.description": {
|
||||
"message": "$INST_NAME: O nome da instância"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper": {
|
||||
"message": "Comando auxiliar"
|
||||
},
|
||||
@@ -1361,6 +1739,12 @@
|
||||
"instance.shared-instance.error.title": {
|
||||
"message": "Algo deu errado"
|
||||
},
|
||||
"instance.shared-instance.network-error.text": {
|
||||
"message": "Não foi possível conectar a API da instância compartilhada"
|
||||
},
|
||||
"instance.shared-instance.network-error.title": {
|
||||
"message": "Erro de conexão"
|
||||
},
|
||||
"instance.shared-instance.owner-tooltip": {
|
||||
"message": "O conteúdo desta instância está sendo compartilhado com outros usuários."
|
||||
},
|
||||
@@ -1428,7 +1812,7 @@
|
||||
"message": "A instância já está aberta"
|
||||
},
|
||||
"instance.worlds.hardcore": {
|
||||
"message": "Modo Intenso"
|
||||
"message": "Modo intenso"
|
||||
},
|
||||
"instance.worlds.incompatible_server": {
|
||||
"message": "Servidor incompatível"
|
||||
@@ -1496,9 +1880,6 @@
|
||||
"modal.modrinth-account-required.browser-description": {
|
||||
"message": "Uma nova aba foi aberta para iniciar sessão. Conclua lá, então volte ao aplicativo."
|
||||
},
|
||||
"modal.modrinth-account-required.cancel-button": {
|
||||
"message": "Cancelar"
|
||||
},
|
||||
"modal.modrinth-account-required.continue-in-browser-heading": {
|
||||
"message": "Continuar em seu navegador"
|
||||
},
|
||||
@@ -1552,5 +1933,11 @@
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "O loader é fornecido pelo servidor"
|
||||
},
|
||||
"settings.sidebar.label.account": {
|
||||
"message": "Conta"
|
||||
},
|
||||
"settings.sidebar.label.display": {
|
||||
"message": "Visualização"
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user