mirror of
https://github.com/modrinth/code.git
synced 2026-08-29 02:54:51 +00:00
Compare commits
39
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
094514ac69 | ||
|
|
6d065ccfc9 | ||
|
|
b20f3dac6d | ||
|
|
2eccfabc25 | ||
|
|
8e9d425b1d | ||
|
|
d0856d46f2 | ||
|
|
e8aee15664 | ||
|
|
98cb6b6b44 | ||
|
|
f27387462e | ||
|
|
ef90f08813 | ||
|
|
9fd45ef2ce | ||
|
|
92971a3e0d | ||
|
|
357224f22a | ||
|
|
e2612d1a33 | ||
|
|
318840e403 | ||
|
|
e88708998b | ||
|
|
ec23640729 | ||
|
|
01912b6ed1 | ||
|
|
7da7898836 | ||
|
|
d8e53cf7dc | ||
|
|
8ab484a298 | ||
|
|
1fc69d0128 | ||
|
|
8197841bc5 | ||
|
|
1626c9b436 | ||
|
|
4d481acd41 | ||
|
|
b4d1eef9c7 | ||
|
|
d94d6c796e | ||
|
|
f7c5552354 | ||
|
|
746bc9a55e | ||
|
|
ebf19eb828 | ||
|
|
e02815e3bc | ||
|
|
57be502f99 | ||
|
|
21a31b337f | ||
|
|
77e86127db | ||
|
|
d5e005adb3 | ||
|
|
866bccf407 | ||
|
|
2089e45fa8 | ||
|
|
6c32b80c38 | ||
|
|
d7b6830fbb |
@@ -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.
|
||||
@@ -147,7 +147,7 @@ jobs:
|
||||
|
||||
deploy:
|
||||
needs: [skip-if-clean, docker-build]
|
||||
if: ${{ needs.skip-if-clean.outputs.internal == 'true' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/prod') }}
|
||||
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 }}
|
||||
|
||||
+4
-2
@@ -5,6 +5,9 @@ dist
|
||||
tmp
|
||||
/out-tsc
|
||||
|
||||
# generated checklist structure dump (packages/moderation/scripts/checklist-docs.ts)
|
||||
.checklist-docs
|
||||
|
||||
# dependencies
|
||||
node_modules
|
||||
|
||||
@@ -65,8 +68,7 @@ generated
|
||||
app-playground-data/*
|
||||
|
||||
.astro
|
||||
.claude/*
|
||||
!.claude/skills/
|
||||
.claude/
|
||||
.letta
|
||||
|
||||
# labrinth demo fixtures
|
||||
|
||||
@@ -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.
|
||||
@@ -175,9 +175,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'),
|
||||
)
|
||||
@@ -364,7 +367,6 @@ onMounted(async () => {
|
||||
onUnmounted(async () => {
|
||||
document.querySelector('body').removeEventListener('click', handleClick)
|
||||
document.querySelector('body').removeEventListener('auxclick', handleAuxClick)
|
||||
unsubscribeSidebarToggle()
|
||||
clearDelayedUpdatePopup()
|
||||
|
||||
await unlistenAdsConsent?.()
|
||||
|
||||
@@ -23,9 +23,8 @@
|
||||
</IconButton>
|
||||
<IconButton
|
||||
type="quiet"
|
||||
color="red"
|
||||
label="Close window"
|
||||
class="relative expanded-button close-button hover:!bg-red focus-visible:!bg-red"
|
||||
class="relative expanded-button close-button"
|
||||
@click="handleClose"
|
||||
>
|
||||
<XIcon />
|
||||
|
||||
+3
-9
@@ -20,18 +20,12 @@
|
||||
</div>
|
||||
|
||||
<div class="flex flex-col gap-6 px-6 pb-6">
|
||||
<div class="flex justify-end gap-2">
|
||||
<ButtonLink class="w-full" href="https://support.modrinth.com" @click="modal?.hide()">
|
||||
<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"
|
||||
class="w-full"
|
||||
:disabled="loadingSignIn"
|
||||
@click="signIn"
|
||||
>
|
||||
<Button type="colored" color="brand" :disabled="loadingSignIn" @click="signIn">
|
||||
<SpinnerIcon v-if="loadingSignIn" class="animate-spin" />
|
||||
<svg
|
||||
v-else
|
||||
|
||||
@@ -403,8 +403,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
-17
@@ -251,6 +251,7 @@ import {
|
||||
type ComboboxOption,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
formatReportType,
|
||||
injectAuth,
|
||||
injectModrinthClient,
|
||||
injectNotificationManager,
|
||||
@@ -329,9 +330,9 @@ const externalFileRows = computed<ExternalFileRow[]>(() =>
|
||||
.sort((left, right) => left.name.localeCompare(right.name)),
|
||||
)
|
||||
const reportReasonOptions = computed<ComboboxOption<ReportReason>[]>(() => [
|
||||
{ value: 'malicious', label: formatMessage(messages.maliciousReason) },
|
||||
{ value: 'inappropriate', label: formatMessage(messages.inappropriateReason) },
|
||||
{ value: 'spam', label: formatMessage(messages.spamReason) },
|
||||
{ value: 'malicious', label: formatReportType(formatMessage, 'malicious') },
|
||||
{ value: 'inappropriate', label: formatReportType(formatMessage, 'inappropriate') },
|
||||
{ value: 'spam', label: formatReportType(formatMessage, 'spam') },
|
||||
])
|
||||
const canSubmitReport = computed(
|
||||
() => Boolean(preview.value && additionalContext.value.trim()) && !submitLoading.value,
|
||||
@@ -543,18 +544,6 @@ const messages = defineMessages({
|
||||
id: 'app.modal.install-to-play.report-reason',
|
||||
defaultMessage: 'Which rule does this instance violate?',
|
||||
},
|
||||
maliciousReason: {
|
||||
id: 'app.modal.install-to-play.report-reason.malicious',
|
||||
defaultMessage: 'Malicious',
|
||||
},
|
||||
inappropriateReason: {
|
||||
id: 'app.modal.install-to-play.report-reason.inappropriate',
|
||||
defaultMessage: 'Inappropriate',
|
||||
},
|
||||
spamReason: {
|
||||
id: 'app.modal.install-to-play.report-reason.spam',
|
||||
defaultMessage: 'Spam',
|
||||
},
|
||||
additionalContext: {
|
||||
id: 'app.modal.install-to-play.additional-context',
|
||||
defaultMessage: 'Additional context',
|
||||
@@ -598,8 +587,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',
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,6 +71,9 @@
|
||||
"app.action-bar.view-logs": {
|
||||
"message": "Zobrazit logy"
|
||||
},
|
||||
"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í"
|
||||
},
|
||||
@@ -212,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."
|
||||
},
|
||||
|
||||
@@ -179,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"
|
||||
},
|
||||
@@ -200,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"
|
||||
},
|
||||
@@ -245,15 +254,30 @@
|
||||
"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"
|
||||
},
|
||||
@@ -359,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"
|
||||
},
|
||||
@@ -440,9 +470,6 @@
|
||||
"app.modal.install-to-play.report-image-too-large": {
|
||||
"message": "Filen overskrider 1MiB størrelse begrænsning"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.spam": {
|
||||
"message": "Spam"
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Delt instance"
|
||||
},
|
||||
|
||||
@@ -210,7 +210,7 @@
|
||||
"message": "Rechte Seitenleiste ausblenden"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Sicherheitswarnung vor der Installation eines Modrinth-Packs (.mrpack) anzeigen, das nicht auf Modrinth gehostet wird."
|
||||
"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"
|
||||
@@ -590,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"
|
||||
},
|
||||
@@ -701,15 +704,6 @@
|
||||
"app.modal.install-to-play.report-reason": {
|
||||
"message": "Gegen welche Regel verstößt diese Instanz?"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.inappropriate": {
|
||||
"message": "Unangemessen"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.malicious": {
|
||||
"message": "Bösartig"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.spam": {
|
||||
"message": "Spam"
|
||||
},
|
||||
"app.modal.install-to-play.report-shared-instance-header": {
|
||||
"message": "Geteilte Instanz melden"
|
||||
},
|
||||
@@ -849,7 +843,7 @@
|
||||
"message": "Startet Instanzen im Vollbildmodus durch Aktualisieren ihrer options.txt-Datei."
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.title": {
|
||||
"message": "Vollbildschirm"
|
||||
"message": "Vollbild"
|
||||
},
|
||||
"app.settings.default-instance-options.height.description": {
|
||||
"message": "Die Höhe des Spielfensters beim Starten"
|
||||
@@ -981,7 +975,7 @@
|
||||
"message": "Neues App-Verzeichnis auswählen"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.title": {
|
||||
"message": "App Installation"
|
||||
"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."
|
||||
@@ -1005,7 +999,7 @@
|
||||
"message": "Verhalten"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Standard Spieleinstellungen"
|
||||
"message": "Standard-Spieloptionen"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Java Installationen"
|
||||
@@ -1188,10 +1182,10 @@
|
||||
"message": "Das Feedback geht direkt an das Modrinth-Team und wird helfen, zukünftige Updates zu gestalten!"
|
||||
},
|
||||
"app.survey.no-thanks": {
|
||||
"message": "Nein, danke"
|
||||
"message": "Nein danke"
|
||||
},
|
||||
"app.survey.take-survey": {
|
||||
"message": "Beantworten"
|
||||
"message": "An Umfrage teilnehmen"
|
||||
},
|
||||
"app.survey.title": {
|
||||
"message": "Hey, Modrinth Nutzer!"
|
||||
@@ -1226,6 +1220,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"
|
||||
},
|
||||
@@ -1619,6 +1616,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"
|
||||
},
|
||||
|
||||
@@ -210,7 +210,7 @@
|
||||
"message": "Rechte Seitenleiste ausblenden"
|
||||
},
|
||||
"app.appearance-settings.unknown-pack-warning.description": {
|
||||
"message": "Sicherheitswarnung vor der Installation eines Modrinth-Packs (.mrpack) anzeigen, das nicht auf Modrinth gehostet wird."
|
||||
"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"
|
||||
@@ -590,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"
|
||||
},
|
||||
@@ -701,15 +704,6 @@
|
||||
"app.modal.install-to-play.report-reason": {
|
||||
"message": "Gegen welche Regel verstößt diese Instanz?"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.inappropriate": {
|
||||
"message": "Unangemessen"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.malicious": {
|
||||
"message": "Bösartig"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.spam": {
|
||||
"message": "Spam"
|
||||
},
|
||||
"app.modal.install-to-play.report-shared-instance-header": {
|
||||
"message": "Geteilte Instanz melden"
|
||||
},
|
||||
@@ -849,7 +843,7 @@
|
||||
"message": "Startet Instanzen im Vollbildmodus durch Aktualisieren ihrer options.txt-Datei."
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.title": {
|
||||
"message": "Vollbildschirm"
|
||||
"message": "Vollbild"
|
||||
},
|
||||
"app.settings.default-instance-options.height.description": {
|
||||
"message": "Die Höhe des Spielfensters beim Starten"
|
||||
@@ -981,7 +975,7 @@
|
||||
"message": "Neues App-Verzeichnis auswählen"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.title": {
|
||||
"message": "App Installation"
|
||||
"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."
|
||||
@@ -1005,7 +999,7 @@
|
||||
"message": "Verhalten"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Standard Spieleinstellungen"
|
||||
"message": "Standard-Spieloptionen"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Java-Installationen"
|
||||
@@ -1188,10 +1182,10 @@
|
||||
"message": "Das Feedback geht direkt an das Modrinth-Team und wird helfen, zukünftige Updates zu gestalten!"
|
||||
},
|
||||
"app.survey.no-thanks": {
|
||||
"message": "Nein, danke"
|
||||
"message": "Nein danke"
|
||||
},
|
||||
"app.survey.take-survey": {
|
||||
"message": "Beantworten"
|
||||
"message": "An Umfrage teilnehmen"
|
||||
},
|
||||
"app.survey.title": {
|
||||
"message": "Hey, Modrinth Nutzer!"
|
||||
@@ -1226,6 +1220,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"
|
||||
},
|
||||
@@ -1619,6 +1616,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"
|
||||
},
|
||||
|
||||
@@ -704,15 +704,6 @@
|
||||
"app.modal.install-to-play.report-reason": {
|
||||
"message": "Which rule does this instance violate?"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.inappropriate": {
|
||||
"message": "Inappropriate"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.malicious": {
|
||||
"message": "Malicious"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.spam": {
|
||||
"message": "Spam"
|
||||
},
|
||||
"app.modal.install-to-play.report-shared-instance-header": {
|
||||
"message": "Report shared instance"
|
||||
},
|
||||
@@ -723,7 +714,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"
|
||||
|
||||
@@ -174,7 +174,7 @@
|
||||
"message": "Ocultar etiqueta de nombre"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Muestra los mundos recientes en la sección \"Volver a jugar\" en la página principal."
|
||||
"message": "Muestra los mundos recientes en la sección \"Volver a jugar\" en la página de inicio."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Volver a jugar mundos"
|
||||
@@ -186,7 +186,7 @@
|
||||
"message": "Minimizar app"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Usa el borde de ventana de tu sistema. Requiere reiniciar la aplicación."
|
||||
"message": "Usa el borde de ventana de tu sistema. Necesita reiniciar la aplicación."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Decoraciones nativas"
|
||||
@@ -225,7 +225,7 @@
|
||||
"message": "Confirmaciones"
|
||||
},
|
||||
"app.behavior-settings.content.title": {
|
||||
"message": "Página principal y contenido"
|
||||
"message": "Página de inicio y contenido"
|
||||
},
|
||||
"app.behavior-settings.startup-and-navigation.title": {
|
||||
"message": "Inicio y navegación"
|
||||
@@ -258,7 +258,7 @@
|
||||
"message": "Descubrir servidores"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Ocultar los servidores ya agregados"
|
||||
"message": "Ocultar los servidores ya añadidos"
|
||||
},
|
||||
"app.browse.hide-installed-modpacks": {
|
||||
"message": "Esconder los ya instalados"
|
||||
@@ -372,7 +372,7 @@
|
||||
"message": "Enviar actualización"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-description": {
|
||||
"message": "Revisar los cambios de contenido que se compartirán con los usuarios de esta instancia."
|
||||
"message": "Revisa los cambios de contenido que se compartirán con los usuarios de esta instancia."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-header": {
|
||||
"message": "Revisar cambios"
|
||||
@@ -384,7 +384,7 @@
|
||||
"message": "Actualizando..."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-body": {
|
||||
"message": "Se requiere una actualización para jugar a {name}. por favor actualiza a la versión más reciente para abrir el juego."
|
||||
"message": "Se necesita una actualización para jugar a {name}. Por favor actualiza a la versión más reciente para iniciar el juego."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-header": {
|
||||
"message": "Hay una actualización disponible"
|
||||
@@ -483,7 +483,7 @@
|
||||
"message": "Ningún usuario coincide con tus filtros."
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-access": {
|
||||
"message": "Ya no recibirán actualizaciones para esta instancia compartida"
|
||||
"message": "Ya no recibirán actualizaciones para esta instancia"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-installed-copy": {
|
||||
"message": "Cualquier copia que tengan instalada se quedará en su dispositivo"
|
||||
@@ -510,10 +510,10 @@
|
||||
"message": "Si revocas el acceso de {username} a esta instancia, tendrás que invitarlos otra vez para que sigan recibiendo actualizaciones."
|
||||
},
|
||||
"app.instance.share.sign-in.button": {
|
||||
"message": "Iniciar sesión"
|
||||
"message": "Inicia sesión"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.description": {
|
||||
"message": "El servicio de instancias compartidas no está disponible, inténtalo otra vez más tarde"
|
||||
"message": "El servicio de instancias compartidas no está disponible, por favor inténtalo otra vez más tarde"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.heading": {
|
||||
"message": "No se puede conectar"
|
||||
@@ -590,6 +590,9 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "No hay servidores ni mundos añadidos"
|
||||
},
|
||||
"app.instance.worlds.refreshing": {
|
||||
"message": "Recargando..."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "Eliminar servidor"
|
||||
},
|
||||
@@ -701,15 +704,6 @@
|
||||
"app.modal.install-to-play.report-reason": {
|
||||
"message": "¿Qué regla rompe esta instancia?"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.inappropriate": {
|
||||
"message": "Inapropiado"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.malicious": {
|
||||
"message": "Malicioso"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.spam": {
|
||||
"message": "Spam"
|
||||
},
|
||||
"app.modal.install-to-play.report-shared-instance-header": {
|
||||
"message": "Reportar instancia compartida"
|
||||
},
|
||||
@@ -717,7 +711,7 @@
|
||||
"message": "Reporte enviado"
|
||||
},
|
||||
"app.modal.install-to-play.report-support-and-bugs": {
|
||||
"message": "Para solicitudes de ayuda, contacte a nuestro <support-link>equipo de soporte</support-link>. Para reportar un bug, abra una <github-link>incidencia (issue) en GitHub</github-link>."
|
||||
"message": "Para solicitudes de ayuda, contacte a nuestro <support-link>equipo de soporte</support-link>. Para reportar un bug, abra una <github-link>issue en GitHub</github-link>."
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "Un archivo solo se revisa si se publica en Modrinth, sin importar su formato (incluido el .mrpack)."
|
||||
@@ -728,6 +722,9 @@
|
||||
"app.modal.install-to-play.shared-instance-content": {
|
||||
"message": "Contenido de la instancia compartida"
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance-unknown-files-description": {
|
||||
"message": "Esta instancia contiene archivos que no están publicados en Modrinth. Recomendamos encarecidamente instalar únicamente archivos de fuentes de confianza."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Este modpack para servidor contiene archivos que no están publicados en Modrinth. Recomendamos encarecidamente instalar únicamente archivos de fuentes de confianza."
|
||||
},
|
||||
@@ -737,6 +734,9 @@
|
||||
"app.modal.install-to-play.unrecognized-files": {
|
||||
"message": "Archivos no reconocidos"
|
||||
},
|
||||
"app.modal.install-to-play.user-blocked": {
|
||||
"message": "Usuario bloqueado"
|
||||
},
|
||||
"app.modal.install-to-play.view-contents": {
|
||||
"message": "Ver contenidos"
|
||||
},
|
||||
@@ -744,11 +744,56 @@
|
||||
"message": "Actualizar para jugar"
|
||||
},
|
||||
"app.modal.update-to-play.removed": {
|
||||
"message": "Eliminado"
|
||||
"message": "Se eliminó"
|
||||
},
|
||||
"app.modal.update-to-play.server-modpack-unknown-files-description": {
|
||||
"message": "Esta actualización de modpack para servidor contiene archivos que no están publicados en Modrinth. Recomendamos encarecidamente instalar únicamente archivos de fuentes de confianza."
|
||||
},
|
||||
"app.modal.update-to-play.shared-instance-added-label": {
|
||||
"message": "Se añadió"
|
||||
},
|
||||
"app.modal.update-to-play.shared-instance-removed-label": {
|
||||
"message": "Se eliminó"
|
||||
},
|
||||
"app.modal.update-to-play.shared-instance-unknown-files-description": {
|
||||
"message": "Esta actualización de instancia contiene archivos que no están publicados en Modrinth. Recomendamos encarecidamente instalar únicamente archivos de fuentes de confianza."
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Es necesario actualizar"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Se necesita una actualización para jugar en {name}. Por favor actualiza a a la versión más reciente para iniciar el juego."
|
||||
},
|
||||
"app.nav.create-new-instance": {
|
||||
"message": "Crear una instancia nueva"
|
||||
},
|
||||
"app.nav.home": {
|
||||
"message": "Inicio"
|
||||
},
|
||||
"app.nav.library": {
|
||||
"message": "Biblioteca"
|
||||
},
|
||||
"app.nav.modrinth-account": {
|
||||
"message": "Cuenta Modrinth"
|
||||
},
|
||||
"app.nav.modrinth-hosting": {
|
||||
"message": "Modrinth Hosting"
|
||||
},
|
||||
"app.nav.sign-in-to-modrinth-account": {
|
||||
"message": "Inicia sesión con una cuenta Modrinth"
|
||||
},
|
||||
"app.nav.signed-in-as": {
|
||||
"message": "Sesión iniciada como <user>{username}</user>"
|
||||
},
|
||||
"app.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Mejorar a Modrinth+"
|
||||
},
|
||||
"app.news.title": {
|
||||
"message": "Noticias"
|
||||
},
|
||||
"app.news.view-all": {
|
||||
"message": "Ver todas las noticias"
|
||||
},
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Este proyecto ya está instalado"
|
||||
},
|
||||
@@ -758,6 +803,9 @@
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Volver al explorador"
|
||||
},
|
||||
"app.project.install-context.back-to-instance": {
|
||||
"message": "Volver a la instancia"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Todas las versiones"
|
||||
},
|
||||
@@ -770,21 +818,177 @@
|
||||
"app.project.versions.already-installed": {
|
||||
"message": "Ya instalado"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-show-tooltip": {
|
||||
"message": "Arrastra para mostrar las instancias recientes"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-tooltip": {
|
||||
"message": "Arrastra para cambiar el tamaño"
|
||||
},
|
||||
"app.restarting": {
|
||||
"message": "Reiniciando..."
|
||||
},
|
||||
"app.settings.app-version": {
|
||||
"message": "App de Modrinth {version}"
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.description": {
|
||||
"message": "Variables de entorno puestas al iniciar una instancia."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.placeholder": {
|
||||
"message": "Ingresa variables de entorno..."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.title": {
|
||||
"message": "Variables de entorno"
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.description": {
|
||||
"message": "Inicia instancias en pantalla completa al modificar su archivo options.txt."
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.title": {
|
||||
"message": "Pantalla completa"
|
||||
},
|
||||
"app.settings.default-instance-options.height.description": {
|
||||
"message": "El largo que tendrá la ventana del juego al iniciar."
|
||||
},
|
||||
"app.settings.default-instance-options.height.placeholder": {
|
||||
"message": "Ingresa la altura..."
|
||||
},
|
||||
"app.settings.default-instance-options.height.title": {
|
||||
"message": "Largo"
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.description": {
|
||||
"message": "Los argumentos dados a Java al iniciar una instancia."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.placeholder": {
|
||||
"message": "Ingresa los argumentos de Java..."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.title": {
|
||||
"message": "Argumentos de Java"
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.description": {
|
||||
"message": "La memoria máxima disponible para cada instancia."
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.title": {
|
||||
"message": "Asignación de memoria"
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.description": {
|
||||
"message": "Se ejecutan tras cerrar el juego."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.placeholder": {
|
||||
"message": "Ingresa comandos post-cierre..."
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.title": {
|
||||
"message": "Comandos post-cierre"
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.description": {
|
||||
"message": "Se ejecutan antes de iniciar el juego."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.placeholder": {
|
||||
"message": "Ingresa comandos pre-inicio..."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.title": {
|
||||
"message": "Comandos pre-inicio"
|
||||
},
|
||||
"app.settings.default-instance-options.width.description": {
|
||||
"message": "El ancho que tendrá la ventana del juego al iniciar."
|
||||
},
|
||||
"app.settings.default-instance-options.width.placeholder": {
|
||||
"message": "Ingresa el ancho..."
|
||||
},
|
||||
"app.settings.default-instance-options.width.title": {
|
||||
"message": "Ancho"
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.description": {
|
||||
"message": "Envuelven al proceso iniciador de Minecraft para añadir funcionalidades o configuraciones."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.placeholder": {
|
||||
"message": "Ingresa comandos de envoltura..."
|
||||
},
|
||||
"app.settings.default-instance-options.wrapper-hook.title": {
|
||||
"message": "Comandos de envoltura"
|
||||
},
|
||||
"app.settings.developer-mode-button.label": {
|
||||
"message": "Alternar el modo desarrollador"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Modo desarrollador activado."
|
||||
},
|
||||
"app.settings.downloading": {
|
||||
"message": "Descargando v{version}"
|
||||
},
|
||||
"app.settings.java-installations.location.title": {
|
||||
"message": "Directorio de Java {version, number}"
|
||||
},
|
||||
"app.settings.operating-system.macos": {
|
||||
"message": "macOS"
|
||||
},
|
||||
"app.settings.privacy.ads-consent.intro": {
|
||||
"message": "Los anuncios hacen posible a Modrinth y financian los pagos a los creadores. Nuestros socios pueden guardar o acceder a cookies en la aplicación para personalizar anuncios y medir su rendimiento. Puedes rechazar esto o administrar tus preferencias abajo."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.description": {
|
||||
"message": "Mostrar la aplicación de Modrinth como tu actividad actual en Discord. Esto no afecta a cualquier Rich Presence añadida a instancias con mods. Necesita reiniciar la app."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.title": {
|
||||
"message": "Discord Rich Presence"
|
||||
},
|
||||
"app.settings.privacy.telemetry.description": {
|
||||
"message": "Modrinth recolecta datos analíticos anónimos y datos de uso para mejorar la experiencia de nuestros usuarios y para personalizar tu experiencia. Al desactivar esta opción, tus datos dejarán de ser recolectados."
|
||||
},
|
||||
"app.settings.privacy.telemetry.title": {
|
||||
"message": "Telemetría"
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.description": {
|
||||
"message": "Muestra la opción 'Copiar detalles' mientras haya una instalación en cola o instalando. Siempre está disponible para las instalaciones fallidas o interrumpidas."
|
||||
},
|
||||
"app.settings.resource-management.always-show-copy-details.title": {
|
||||
"message": "Siempre mostrar 'Copiar detalles'"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.description": {
|
||||
"message": "La app cargará más lento hasta que se reconstruya completamente el caché."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.confirm.title": {
|
||||
"message": "¿Limpiar el caché?"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.description": {
|
||||
"message": "Borra todos los datos en caché y los redescarga de Modrinth. La app cargará más lento hasta que se reconstruya completamente el caché."
|
||||
},
|
||||
"app.settings.resource-management.app-cache.purge": {
|
||||
"message": "Limpiar caché"
|
||||
},
|
||||
"app.settings.resource-management.app-cache.title": {
|
||||
"message": "Caché de la aplicación"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.description": {
|
||||
"message": "Los respaldos de los datos de aplicación importantes se guardan aquí, en caso de que los necesites luego."
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.open-folder": {
|
||||
"message": "Abrir la carpeta de respaldos"
|
||||
},
|
||||
"app.settings.resource-management.app-database-backups.title": {
|
||||
"message": "Respaldos de la base de datos de la aplicación"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.browse": {
|
||||
"message": "Buscar un directorio para la aplicación"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.description": {
|
||||
"message": "Aquí es donde la aplicación guardará las instancias y otros archivos. Los cambios entrarán en efecto al reiniciar la app."
|
||||
},
|
||||
"app.settings.resource-management.app-directory.select": {
|
||||
"message": "Seleccionar un directorio nuevo para la app"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.title": {
|
||||
"message": "Directorio de la aplicación"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.description": {
|
||||
"message": "El número de archivos que la app puede descargar a la vez. Baja este número si las descargas no son estables con tu conexión. Necesita reiniciar la app."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-downloads.title": {
|
||||
"message": "Máximas descargas a la vez"
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.description": {
|
||||
"message": "El número de archivos que la app puede escribir en el disco a la vez. Baja este número si frecuentemente encuentras errores de I/O. Necesita reiniciar la app."
|
||||
},
|
||||
"app.settings.resource-management.maximum-concurrent-writes.title": {
|
||||
"message": "Máximas escrituras a la vez"
|
||||
},
|
||||
"app.settings.sidebar.label.instances": {
|
||||
"message": "Instancias"
|
||||
},
|
||||
@@ -794,6 +998,9 @@
|
||||
"app.settings.tabs.behavior": {
|
||||
"message": "Comportamiento"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Opciones por defecto del juego"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Instalaciones de Java"
|
||||
},
|
||||
@@ -968,11 +1175,17 @@
|
||||
"app.skins.toggle-ears-features-on": {
|
||||
"message": "Activar"
|
||||
},
|
||||
"app.survey.body": {
|
||||
"message": "¿Te importaría responder unas cuantas preguntas sobre tu experiencia con la aplicación de Modrinth?"
|
||||
},
|
||||
"app.survey.footer": {
|
||||
"message": "¡Tus comentarios llegarán directamente al equipo de Modrinth, y los ayudará a hacer mejores actualizaciones!"
|
||||
},
|
||||
"app.survey.no-thanks": {
|
||||
"message": "No gracias"
|
||||
"message": "No, gracias"
|
||||
},
|
||||
"app.survey.take-survey": {
|
||||
"message": "Aceptar encuesta"
|
||||
},
|
||||
"app.survey.title": {
|
||||
"message": "¡Hola, usuario de Modrinth!"
|
||||
@@ -1007,6 +1220,9 @@
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "¡La versión {version} se ha instalado correctamente!"
|
||||
},
|
||||
"app.user.project.install-to-instance": {
|
||||
"message": "Instalar a instancia"
|
||||
},
|
||||
"app.world.server-modal.placeholder-address": {
|
||||
"message": "ejemplo.modrinth.gg"
|
||||
},
|
||||
@@ -1025,18 +1241,39 @@
|
||||
"app.world.world-item.players-online": {
|
||||
"message": "{count} en línea"
|
||||
},
|
||||
"content.shared-instance.change-version-body": {
|
||||
"message": "Cambiar la versión solo cambiará tu copia local. Las actualizaciones futuras a la instancia pueden restablecerla o cambiarla de nuevo."
|
||||
},
|
||||
"content.shared-instance.delete-bulk-body": {
|
||||
"message": "Algunos proyectos seleccionados hacen parte de la instancia compartida. Borrarlos solo cambiará tu copia local, y las actualizaciones futuras a la instancia pueden restablecerlos o cambiarlos de nuevo."
|
||||
},
|
||||
"content.shared-instance.delete-button": {
|
||||
"message": "Borrar de todas formas"
|
||||
},
|
||||
"content.shared-instance.delete-many-button": {
|
||||
"message": "Borrar {count, number} proyectos de todas formas"
|
||||
},
|
||||
"content.shared-instance.delete-single-body": {
|
||||
"message": "Borrarlo solo cambiará tu copia local, y las actualizaciones futuras a la instancia pueden restablecerlo o cambiarlo de nuevo."
|
||||
},
|
||||
"content.shared-instance.disable-bulk-body": {
|
||||
"message": "Algunos proyectos seleccionados hacen parte de la instancia compartida. Desactivarlos solo cambiará tu copia local, y las actualizaciones futuras a la instancia pueden reactivarlos, restablecerlos o cambiarlos de nuevo."
|
||||
},
|
||||
"content.shared-instance.disable-button": {
|
||||
"message": "Desactivar de todas formas"
|
||||
},
|
||||
"content.shared-instance.disable-many-button": {
|
||||
"message": "Desactivar {count, number} proyectos de todas formas"
|
||||
},
|
||||
"content.shared-instance.disable-single-body": {
|
||||
"message": "Desactivarlo solo cambiará tu copia local, y las actualizaciones futuras a la instancia pueden reactivarlo, restablecerlo o cambiarlo de nuevo."
|
||||
},
|
||||
"content.shared-instance.unlink-body": {
|
||||
"message": "Desvincular solo cambiará tu copia local, y las actualizaciones futuras a la instancia pueden restablecerlo o cambiarlo de nuevo."
|
||||
},
|
||||
"content.shared-instance.warning-header": {
|
||||
"message": "Esto es parte de la instancia compartida"
|
||||
},
|
||||
"friends.action.add-friend": {
|
||||
"message": "Añadir un amigo"
|
||||
},
|
||||
@@ -1100,6 +1337,66 @@
|
||||
"friends.sign-in-to-add-friends": {
|
||||
"message": "<link>¡Inicia sesión en una cuenta de Modrinth</link> para añadir amigos y ver qué están jugando!"
|
||||
},
|
||||
"installation-settings.shared-instance.linked-title": {
|
||||
"message": "Vincular instancia compartida"
|
||||
},
|
||||
"installation-settings.shared-instance.title": {
|
||||
"message": "Despublicar instancia"
|
||||
},
|
||||
"installation-settings.shared-instance.unlink-button": {
|
||||
"message": "Desvincular instancia compartida"
|
||||
},
|
||||
"installation-settings.shared-instance.unlink-description": {
|
||||
"message": "Desconecta esta instancia local de cualquier actualización futura."
|
||||
},
|
||||
"installation-settings.shared-instance.unlinking-button": {
|
||||
"message": "Desvinculando..."
|
||||
},
|
||||
"installation-settings.shared-instance.unpublish-button": {
|
||||
"message": "Despublicar instancia compartida"
|
||||
},
|
||||
"installation-settings.shared-instance.unpublish-description": {
|
||||
"message": "Borra esta instancia compartida de Modrinth y deja de enviar actualizaciones a cualquiera que la tenga. Tu instancia local no se verá afectada."
|
||||
},
|
||||
"installation-settings.shared-instance.unpublishing-button": {
|
||||
"message": "Despublicando..."
|
||||
},
|
||||
"installation-settings.unlink-shared-instance.modal.admonition-body": {
|
||||
"message": "Esto solo afecta a tu instancia local. Tu contenido instalado se quedará en este dispositivo, y la instancia compartida, junto a todos los que la estén usando, no se verán afectados."
|
||||
},
|
||||
"installation-settings.unlink-shared-instance.modal.admonition-header": {
|
||||
"message": "Desvinculando instancia compartida"
|
||||
},
|
||||
"installation-settings.unlink-shared-instance.modal.header": {
|
||||
"message": "Desvincular instancia compartida"
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.admonition-body": {
|
||||
"message": "Esto borrará la instancia compartida de los servidores de Modrinth. La gente que esté usando esta instancia dejará de recibir actualizaciones, pero tu instancia local y sus contenidos se quedarán en este dispositivo."
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.admonition-header": {
|
||||
"message": "Despublicando instancia compartida"
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.header": {
|
||||
"message": "Despublicar instancia compartida"
|
||||
},
|
||||
"instance.action.create-shortcut": {
|
||||
"message": "Crear acceso directo"
|
||||
},
|
||||
"instance.action.export-modpack": {
|
||||
"message": "Exportar modpack"
|
||||
},
|
||||
"instance.action.launch-instance": {
|
||||
"message": "Iniciar instancia"
|
||||
},
|
||||
"instance.action.more-actions": {
|
||||
"message": "Más acciones"
|
||||
},
|
||||
"instance.action.open-folder": {
|
||||
"message": "Abrir carpeta"
|
||||
},
|
||||
"instance.action.repair": {
|
||||
"message": "Reparar"
|
||||
},
|
||||
"instance.action.settings": {
|
||||
"message": "Ajustes de la instancia"
|
||||
},
|
||||
@@ -1178,6 +1475,12 @@
|
||||
"instance.settings.sharing.active-invites.code": {
|
||||
"message": "Link de invitación"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.description": {
|
||||
"message": "Cualquiera con alguno de estos links se puede unir mientras el link esté activo."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.empty": {
|
||||
"message": "No hay invitaciones activas."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.expires": {
|
||||
"message": "Expira"
|
||||
},
|
||||
@@ -1193,6 +1496,9 @@
|
||||
"instance.settings.sharing.active-invites.uses": {
|
||||
"message": "Usos"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-body": {
|
||||
"message": "El link de invitación <monospace>{code}</monospace> dejará de funcionar inmediatamente. Cualquiera que ya se haya unido mantendrá su acceso."
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-header": {
|
||||
"message": "Esta acción no se puede deshacer"
|
||||
},
|
||||
@@ -1310,6 +1616,27 @@
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Hooks de inicio del juego"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.description": {
|
||||
"message": "Todas estas se ejecutan en el directorio de trabajo de la instancia, con las siguientes variables:"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-dir.description": {
|
||||
"message": "$INST_DIR: La ruta absoluta a la carpeta de la instancia"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-id.description": {
|
||||
"message": "$INST_ID: El nombre la carpeta de la instancia"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java-args.description": {
|
||||
"message": "$INST_JAVA_ARGS: Los Argumentos JVM dados al juego"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-java.description": {
|
||||
"message": "$INST_JAVA: La ruta absoluta a el binario de Java"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-mc-dir.description": {
|
||||
"message": "$INST_MC_DIR: Un alias que apunta a $INST_DIR"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-name.description": {
|
||||
"message": "$INST_NAME: El nombre de la instancia"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper": {
|
||||
"message": "Wrapper"
|
||||
},
|
||||
@@ -1325,6 +1652,9 @@
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Versión de {loader}"
|
||||
},
|
||||
"instance.settings.tabs.installation.locked": {
|
||||
"message": "Los ajustes de instalación no están disponibles mientras esta instancia esté bloqueada."
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java y memoria"
|
||||
},
|
||||
@@ -1364,6 +1694,9 @@
|
||||
"instance.settings.tabs.java.java-path-placeholder": {
|
||||
"message": "/ruta/de/java"
|
||||
},
|
||||
"instance.settings.tabs.sharing": {
|
||||
"message": "Compartir"
|
||||
},
|
||||
"instance.settings.tabs.window": {
|
||||
"message": "Ventana"
|
||||
},
|
||||
@@ -1394,14 +1727,62 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Ingresa el ancho..."
|
||||
},
|
||||
"instance.shared-instance.error.title": {
|
||||
"message": "Algo ha salido mal"
|
||||
},
|
||||
"instance.shared-instance.network-error.text": {
|
||||
"message": "No se pudo conectar con la API de las instancias compartidas"
|
||||
},
|
||||
"instance.shared-instance.network-error.title": {
|
||||
"message": "Error de conexión"
|
||||
},
|
||||
"instance.shared-instance.owner-tooltip": {
|
||||
"message": "El contenido de la instancia se está compartiendo a otros usuarios."
|
||||
},
|
||||
"instance.shared-instance.publish-review.added-label": {
|
||||
"message": "Se añadió"
|
||||
},
|
||||
"instance.shared-instance.publish-review.admonition-header": {
|
||||
"message": "Enviar actualización a los jugadores"
|
||||
},
|
||||
"instance.shared-instance.publish-review.config-title-v2": {
|
||||
"message": "Seleccionar archivos de configuración"
|
||||
},
|
||||
"instance.shared-instance.publish-review.description": {
|
||||
"message": "Revisa los cambios de contenido y escoge cualquier archivo de configuración que quieras incluir en esta actualización."
|
||||
},
|
||||
"instance.shared-instance.publish-review.header": {
|
||||
"message": "Revisar cambios"
|
||||
},
|
||||
"instance.shared-instance.publish-review.publish-button": {
|
||||
"message": "Enviar actualización"
|
||||
},
|
||||
"instance.shared-instance.publish-review.removed-label": {
|
||||
"message": "Se removió"
|
||||
"message": "Se eliminó"
|
||||
},
|
||||
"instance.shared-instance.tooltip": {
|
||||
"message": "El contenido de esta instancia está siendo administrado por alguien más."
|
||||
},
|
||||
"instance.shared-instance.unavailable.access-revoked-text": {
|
||||
"message": "Tu acceso a la instancia compartida fue revocado. Esta instancia seguirá disponible, pero ya no está vinculada, y no recibirás más actualizaciones."
|
||||
},
|
||||
"instance.shared-instance.unavailable.deleted-text": {
|
||||
"message": "La instancia principal fue borrada. Esta instancia seguirá disponible, pero ya no está vinculada, y no recibirás más actualizaciones."
|
||||
},
|
||||
"instance.shared-instance.unavailable.locked-text": {
|
||||
"message": "Esta instancia compartida fue bloqueada por el equipo de Moderación de Contenido. Ya no recibirá más actualizaciones de la instancia principal y tampoco se puede jugar."
|
||||
},
|
||||
"instance.shared-instance.unavailable.locked-title": {
|
||||
"message": "Instancia bloqueada"
|
||||
},
|
||||
"instance.shared-instance.unavailable.manager-fallback": {
|
||||
"message": "el administrador de la instancia"
|
||||
},
|
||||
"instance.shared-instance.unavailable.text": {
|
||||
"message": "Tu instancia local sigue disponible, pero ya no está vinculada y no recibirá actualizaciones."
|
||||
},
|
||||
"instance.shared-instance.unavailable.title": {
|
||||
"message": "Instancia compartida no disponible"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Un servidor de Minecraft"
|
||||
@@ -1466,6 +1847,12 @@
|
||||
"minecraft-account.sign-in": {
|
||||
"message": "Inicia sesión en Minecraft"
|
||||
},
|
||||
"minecraft-required.description": {
|
||||
"message": "Necesitas una cuenta de Microsoft con Minecraft comprado para poder iniciar el juego."
|
||||
},
|
||||
"minecraft-required.description-header": {
|
||||
"message": "Inicia sesión en Microsoft"
|
||||
},
|
||||
"minecraft-required.dont-have-account": {
|
||||
"message": "¿No tienes una cuenta?"
|
||||
},
|
||||
@@ -1479,13 +1866,28 @@
|
||||
"message": "Minecraft requerido"
|
||||
},
|
||||
"minecraft-required.sign-in": {
|
||||
"message": "Iniciar sesión con Microsoft"
|
||||
"message": "Inicia sesión en Microsoft"
|
||||
},
|
||||
"modal.modrinth-account-required.browser-description": {
|
||||
"message": "Se abrió una pestaña para que inicies sesión. Completa el proceso ahí, y luego regresa a la app."
|
||||
},
|
||||
"modal.modrinth-account-required.continue-in-browser-heading": {
|
||||
"message": "Continúa en el navegador"
|
||||
},
|
||||
"modal.modrinth-account-required.create-account-button": {
|
||||
"message": "Crea una cuenta"
|
||||
},
|
||||
"modal.modrinth-account-required.description": {
|
||||
"message": "Necesitas iniciar sesión con tu cuenta Modrinth antes de que puedas usar esto."
|
||||
},
|
||||
"modal.modrinth-account-required.header": {
|
||||
"message": "Cuenta requerida"
|
||||
},
|
||||
"modal.modrinth-account-required.open-browser-again-button": {
|
||||
"message": "Abrir el navegador otra vez"
|
||||
},
|
||||
"modal.modrinth-account-required.sign-in-button": {
|
||||
"message": "Iniciar sesión en Modrinth"
|
||||
"message": "Inicia sesión en Modrinth"
|
||||
},
|
||||
"modal.modrinth-account-required.sign-in-heading": {
|
||||
"message": "Iniciar sesión con una cuenta de Modrinth"
|
||||
@@ -1496,6 +1898,9 @@
|
||||
"modal.modrinth-account-required.support-prompt": {
|
||||
"message": "¿Tienes problemas con al iniciar sesión? <support>Consigue ayuda</support>"
|
||||
},
|
||||
"modal.modrinth-account-required.waiting-for-browser": {
|
||||
"message": "Esperando la confirmación del navegador..."
|
||||
},
|
||||
"search.filter.locked.instance": {
|
||||
"message": "Proporcionado por la instancia"
|
||||
},
|
||||
|
||||
@@ -32,6 +32,15 @@
|
||||
"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"
|
||||
},
|
||||
@@ -41,6 +50,12 @@
|
||||
"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"
|
||||
},
|
||||
|
||||
@@ -512,6 +512,9 @@
|
||||
"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"
|
||||
},
|
||||
@@ -587,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"
|
||||
},
|
||||
@@ -698,15 +704,6 @@
|
||||
"app.modal.install-to-play.report-reason": {
|
||||
"message": "Quelle règle cette instance enfreint-elle ?"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.inappropriate": {
|
||||
"message": "Inapproprié"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.malicious": {
|
||||
"message": "Malicieux"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.spam": {
|
||||
"message": "Spam"
|
||||
},
|
||||
"app.modal.install-to-play.report-shared-instance-header": {
|
||||
"message": "Signaler une instance partagée"
|
||||
},
|
||||
@@ -833,6 +830,9 @@
|
||||
"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..."
|
||||
},
|
||||
@@ -854,6 +854,9 @@
|
||||
"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..."
|
||||
},
|
||||
@@ -869,6 +872,21 @@
|
||||
"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."
|
||||
},
|
||||
@@ -878,6 +896,15 @@
|
||||
"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"
|
||||
},
|
||||
@@ -896,27 +923,72 @@
|
||||
"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"
|
||||
},
|
||||
@@ -1103,11 +1175,20 @@
|
||||
"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": "Participer au sondage"
|
||||
"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."
|
||||
@@ -1139,6 +1220,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"
|
||||
},
|
||||
@@ -1388,6 +1472,9 @@
|
||||
"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."
|
||||
},
|
||||
@@ -1406,6 +1493,9 @@
|
||||
"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"
|
||||
},
|
||||
@@ -1518,11 +1608,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"
|
||||
},
|
||||
@@ -1566,7 +1677,7 @@
|
||||
"message": "Variables d'environnement"
|
||||
},
|
||||
"instance.settings.tabs.java.hooks": {
|
||||
"message": "Crochets"
|
||||
"message": "Hooks"
|
||||
},
|
||||
"instance.settings.tabs.java.java-arguments": {
|
||||
"message": "Arguments Java"
|
||||
@@ -1616,6 +1727,9 @@
|
||||
"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"
|
||||
},
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"message": "Letöltések"
|
||||
},
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "További futó játékprofilok elrejtése"
|
||||
"message": "További futó példányok elrejtése"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Másolva"
|
||||
@@ -21,7 +21,7 @@
|
||||
"message": "Elutasítás"
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Játékprofil megnyitása"
|
||||
"message": "Példány megnyitása"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Újra"
|
||||
@@ -51,7 +51,7 @@
|
||||
"message": "A letöltés nem fejeződött be"
|
||||
},
|
||||
"app.action-bar.install.summary.instance-not-found": {
|
||||
"message": "A játékprofil nem található"
|
||||
"message": "A példány nem található"
|
||||
},
|
||||
"app.action-bar.install.summary.invalid-file-path": {
|
||||
"message": "A fájl elérési útja érvénytelen"
|
||||
@@ -87,7 +87,7 @@
|
||||
"message": "Valami félrement"
|
||||
},
|
||||
"app.action-bar.install.unknown-instance": {
|
||||
"message": "Ismeretlen játékprofil"
|
||||
"message": "Ismeretlen példány"
|
||||
},
|
||||
"app.action-bar.install.updating-shared-content": {
|
||||
"message": "Megosztott tartalom frissítése"
|
||||
@@ -96,25 +96,25 @@
|
||||
"message": "Telepítések"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "Beállítás elsődleges játékprofilként"
|
||||
"message": "Beállítás elsődleges példányként"
|
||||
},
|
||||
"app.action-bar.no-instances-running": {
|
||||
"message": "Nincsenek futó játékprofilok"
|
||||
"message": "Nincsenek futó példányok"
|
||||
},
|
||||
"app.action-bar.offline": {
|
||||
"message": "Offline"
|
||||
},
|
||||
"app.action-bar.primary-instance": {
|
||||
"message": "Elsődleges játékprofil"
|
||||
"message": "Elsődleges példány"
|
||||
},
|
||||
"app.action-bar.reload-to-update": {
|
||||
"message": "Frissítés elérhető"
|
||||
"message": "Töltsd újra a frissítéshez"
|
||||
},
|
||||
"app.action-bar.show-more-running-instances": {
|
||||
"message": "További futó pédányok megjelenítése"
|
||||
},
|
||||
"app.action-bar.stop-instance": {
|
||||
"message": "Játékprofil leállítása"
|
||||
"message": "Példány leállítása"
|
||||
},
|
||||
"app.action-bar.update": {
|
||||
"message": "Frissítés"
|
||||
@@ -123,7 +123,7 @@
|
||||
"message": "Aktív letöltések megtekintése"
|
||||
},
|
||||
"app.action-bar.view-instance": {
|
||||
"message": "Játékprofil megtekintése"
|
||||
"message": "Példányok megtekintése"
|
||||
},
|
||||
"app.action-bar.view-logs": {
|
||||
"message": "Naplók megtekintése"
|
||||
@@ -192,7 +192,7 @@
|
||||
"message": "Rendszerablakkeret"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Megjeleníti, hogy mennyi időt töltöttél egy játékprofilban."
|
||||
"message": "Megjeleníti, hogy mennyi időt töltöttél egy példányban."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Játékidő megjelenítése"
|
||||
@@ -231,13 +231,13 @@
|
||||
"message": "Indítás és navigáció"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "Szerver hozzáadása a játékprofilhoz"
|
||||
"message": "Szerver hozzáadása az példányhoz"
|
||||
},
|
||||
"app.browse.add-to-an-instance": {
|
||||
"message": "Hozzáadás egy játékprofilhoz"
|
||||
"message": "Hozzáadás egy példányhoz"
|
||||
},
|
||||
"app.browse.add-to-instance": {
|
||||
"message": "Hozzáadás a játékprofilhoz"
|
||||
"message": "Hozzáadás a példányhoz"
|
||||
},
|
||||
"app.browse.add-to-instance-name": {
|
||||
"message": "Hozzáadás ehhez: {instanceName}"
|
||||
@@ -249,7 +249,7 @@
|
||||
"message": "Már hozzá van adva"
|
||||
},
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "Vissza a játékprofilhoz"
|
||||
"message": "Vissza a példányhoz"
|
||||
},
|
||||
"app.browse.discover-project-type": {
|
||||
"message": "{projectType} keresése"
|
||||
@@ -267,7 +267,7 @@
|
||||
"message": "Modcsomagok"
|
||||
},
|
||||
"app.browse.server-instance-content-warning": {
|
||||
"message": "A tartalom hozzáadása ronthatja a kompatibilitást a szerverhez való csatlakozáskor. A hozzáadott tartalom elveszik, ha frissíted a szerverprofil tartalmát."
|
||||
"message": "Tartalom hozzáadása kompatibilitási problémákat okozhat a szerverhez való csatlakozáskor. A hozzáadott tartalmak a szerverpéldány tartalmának frissítésekor elvesznek, ezért ezt tartsd szem előtt."
|
||||
},
|
||||
"app.browse.server.installing": {
|
||||
"message": "Telepítés"
|
||||
@@ -300,16 +300,16 @@
|
||||
"message": "A tartalom letöltése..."
|
||||
},
|
||||
"app.install.phase.downloading_minecraft": {
|
||||
"message": "A Minecraft letöltése..."
|
||||
"message": "Minecraft letöltése"
|
||||
},
|
||||
"app.install.phase.downloading_pack_file": {
|
||||
"message": "A csomagfájl letöltése..."
|
||||
"message": "Csomagfájlok letöltése"
|
||||
},
|
||||
"app.install.phase.extracting_overrides": {
|
||||
"message": "Felülírások kibontása..."
|
||||
},
|
||||
"app.install.phase.finalizing": {
|
||||
"message": "Befejezés..."
|
||||
"message": "Befejezés"
|
||||
},
|
||||
"app.install.phase.preparing_instance": {
|
||||
"message": "Telepítésre vár..."
|
||||
@@ -330,7 +330,7 @@
|
||||
"message": "A Java {version} előkészítése..."
|
||||
},
|
||||
"app.install.phase.preparing_java.validating": {
|
||||
"message": "A Java {version} ellenőrzése..."
|
||||
"message": "A Java {version} ellenőrzése"
|
||||
},
|
||||
"app.install.phase.reading_pack_manifest": {
|
||||
"message": "A modcsomag leírófájljának beolvasása..."
|
||||
@@ -345,7 +345,7 @@
|
||||
"message": "A tartalom meghatározása..."
|
||||
},
|
||||
"app.install.phase.rolling_back": {
|
||||
"message": "Visszavonás..."
|
||||
"message": "Visszavonás"
|
||||
},
|
||||
"app.install.phase.running_loader_processors": {
|
||||
"message": "Betöltőfolyamatok futtatása..."
|
||||
@@ -354,7 +354,7 @@
|
||||
"message": "Hozzáadva"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.changes-body": {
|
||||
"message": "A te gépeden lévő játékprofil újabb, mint azoké a felhasználóké, akikkel megosztottad."
|
||||
"message": "A te gépeden lévő példány újabb, mint azoké a felhasználóké, akikkel megosztottad."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.changes-header": {
|
||||
"message": "A változtatásaid még nem lettek megosztva"
|
||||
@@ -372,7 +372,7 @@
|
||||
"message": "Frissítés közzététele"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-description": {
|
||||
"message": "A játékprofilt használó összes résztvevővel megosztásra kerülő tartalomváltoztatások áttekintése."
|
||||
"message": "A példányt használó összes résztvevővel megosztásra kerülő tartalomváltoztatások áttekintése."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.review-header": {
|
||||
"message": "Változtatások áttekintése"
|
||||
@@ -384,25 +384,25 @@
|
||||
"message": "Áttekintés..."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-body": {
|
||||
"message": "Egy frssítés szükséges a(z) {name} játékprofilhoz. Kérjük, frissítsd a játékot a legújabb verzióra az indításhoz."
|
||||
"message": "Egy frssítés szükséges a(z) {name} példányhoz. Kérjük, frissítsd a játékot a legújabb verzióra az indításhoz."
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-header": {
|
||||
"message": "Frissítés érhető el"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "A játékprofilhoz tartozó összes adat véglegesen törlődik, beleértve a világokat, a beállításokat és az összes telepített tartalmat."
|
||||
"message": "A példányodhoz tartozó összes adat véglegesen törlődik, beleértve a világjaidat, a beállításaidat és az összes telepített tartalmat."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Ezt a műveletet nem lehet visszavonni"
|
||||
},
|
||||
"app.instance.confirm-delete.delete-button": {
|
||||
"message": "Játékprofil törlése"
|
||||
"message": "Példány törlése"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Játékprofil törlése"
|
||||
"message": "Példány törlése"
|
||||
},
|
||||
"app.instance.modpack-already-installed.body": {
|
||||
"message": "Ez a modcsomag már telepítve van a(z) <bold>{instanceName}</bold> játékprofilban. Biztosan duplikálni szeretnéd?"
|
||||
"message": "Ez a modcsomag már telepítve van a(z) <bold>{instanceName}</bold> példányban. Biztosan meg szeretnéd kettőzni?"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create": {
|
||||
"message": "Létrehozás"
|
||||
@@ -411,7 +411,7 @@
|
||||
"message": "A modcsomag már telepítve van"
|
||||
},
|
||||
"app.instance.modpack-already-installed.instance": {
|
||||
"message": "Játékprofil"
|
||||
"message": "Példány"
|
||||
},
|
||||
"app.instance.mods.bulk-update.downloading-projects": {
|
||||
"message": "{current, number}/{total, number} projekt letöltése..."
|
||||
@@ -426,7 +426,7 @@
|
||||
"message": "projekt"
|
||||
},
|
||||
"app.instance.mods.locked-content": {
|
||||
"message": "Zárolt játékprofilokban a tartalom nem változtatható meg."
|
||||
"message": "Zárolt példányokban a tartalom nem változtatható meg."
|
||||
},
|
||||
"app.instance.mods.project-was-added": {
|
||||
"message": "„{name}” hozzá lett adva"
|
||||
@@ -444,7 +444,7 @@
|
||||
"message": "Sikeresen feltöltve"
|
||||
},
|
||||
"app.instance.share.empty.description": {
|
||||
"message": "Ezt a játékprofilt megoszthatod a barátaiddal!"
|
||||
"message": "Ezt a példányt megoszthatod a barátaiddal!"
|
||||
},
|
||||
"app.instance.share.empty.heading": {
|
||||
"message": "Nincsenek barátok meghívva"
|
||||
@@ -456,7 +456,7 @@
|
||||
"message": "{name} megosztása"
|
||||
},
|
||||
"app.instance.share.invite-modal.user-limit-reached": {
|
||||
"message": "Ez a játékprofil elérte a {limit} felhasználós korlátot."
|
||||
"message": "Ez a példány elérte a {limit} felhasználós korlátot."
|
||||
},
|
||||
"app.instance.share.locked.empty-description-prefix": {
|
||||
"message": "Be kell jelentkezned mint"
|
||||
@@ -483,16 +483,16 @@
|
||||
"message": "Nem található a keresésnek megfelelő felhasználó"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-access": {
|
||||
"message": "Többé nem fog frissítéseket kapni ehhez a megosztott játékprofilhoz"
|
||||
"message": "Többé nem fog frissítéseket kapni ehhez a megosztott példányhoz"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-installed-copy": {
|
||||
"message": "A már telepített játékprofilok megmaradnak az eszközén"
|
||||
"message": "A már telepített példányok megmaradnak az eszközökön"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-invite-again": {
|
||||
"message": "Később újra meghívhatod"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-last-user": {
|
||||
"message": "Ő az utolsó felhasználó, a megosztás ezen az játékprofilon le lesz állítva"
|
||||
"message": "Ő az utolsó felhasználó, a megosztás ezen az példányon le lesz állítva"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effects-label": {
|
||||
"message": "Mi fog történni?"
|
||||
@@ -507,40 +507,40 @@
|
||||
"message": "{username} avatárja"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.warning-body": {
|
||||
"message": "Ha visszavonod {username} hozzáférését ehhez a megosztott játékprofilhoz, újra meg kell hívnod, mielőtt frissítéseket kaphatna."
|
||||
"message": "Ha megvonod {username} hozzáférését ehhez a megosztott példányhoz, újra meg kell hívnod, mielőtt frissítéseket kaphatna."
|
||||
},
|
||||
"app.instance.share.sign-in.button": {
|
||||
"message": "Bejelentkezés"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.description": {
|
||||
"message": "A megosztott játékprofilok szolgáltatás pillanatnyilag nem érhető el. Kérjük, próbáld újra később"
|
||||
"message": "A megosztott példányok szolgáltatás pillanatnyilag nem érhető el. Kérjük, próbáld újra később"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.heading": {
|
||||
"message": "Nem sikerült csatlakozni"
|
||||
},
|
||||
"app.instance.share.unlink.body": {
|
||||
"message": "A játékprofil megosztásához le kell választanod ezt a modcsomagot"
|
||||
"message": "A példány megosztásához le kell választanod ezt a modcsomagot"
|
||||
},
|
||||
"app.instance.share.unlink.header": {
|
||||
"message": "A megosztáshoz le kell választani"
|
||||
},
|
||||
"app.instance.shared-instance-already-installed.body": {
|
||||
"message": "Ez a megosztott játékprofil már telepítve van <bold>{instanceName} </bold> néven. Biztosan telepíteni szeretnél egy másik másolatot?"
|
||||
"message": "Ez a megosztott példány már telepítve van <bold>{instanceName} </bold> néven. Biztosan telepíteni szeretnél egy másik másolatot?"
|
||||
},
|
||||
"app.instance.shared-instance-already-installed.header": {
|
||||
"message": "A megosztott játékprofil már telepítve van"
|
||||
"message": "A megosztott példány már telepítve van"
|
||||
},
|
||||
"app.instance.shared-instance-already-installed.install-anyway": {
|
||||
"message": "Telepítés mindenképp"
|
||||
},
|
||||
"app.instance.shared-instance-already-installed.instance": {
|
||||
"message": "Játékprofil"
|
||||
"message": "Példány"
|
||||
},
|
||||
"app.instance.shared-instance-wrong-account.fallback-username": {
|
||||
"message": "az összekapcsolt fiók"
|
||||
},
|
||||
"app.instance.shared-instance-wrong-account.owner-admonition-body-v2": {
|
||||
"message": ", hogy kezelhesd ezt a megosztott játékprofilt. Nem fogod tudni közzétenni a frissítéseket."
|
||||
"message": ", hogy kezelhesd ezt a megosztott példányt. Nem fogod tudni közzétenni a frissítéseket."
|
||||
},
|
||||
"app.instance.shared-instance-wrong-account.sign-in-as-label": {
|
||||
"message": "Jelentkezz be mint"
|
||||
@@ -549,7 +549,7 @@
|
||||
"message": "Be kell jelentkezned a Modrinthba"
|
||||
},
|
||||
"app.instance.shared-instance-wrong-account.user-admonition-body-v2": {
|
||||
"message": ", hogy frissítéseket kapj ehhez a megosztott játékprofilhoz."
|
||||
"message": ", hogy frissítéseket kapj ehhez a megosztott példányhoz."
|
||||
},
|
||||
"app.instance.shared-instance-wrong-account.warning-header": {
|
||||
"message": "Nem a megfelelő Modrinth-fiókot használod"
|
||||
@@ -567,7 +567,7 @@
|
||||
"message": "Világ törlése"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-body": {
|
||||
"message": "Ez a világ véglegesen törölve lesz ebből a játékprofilból. Ezt NEM tudod visszavonni!"
|
||||
"message": "Ez a világ véglegesen törölve lesz ebből a példányból. Ezt NEM tudod visszavonni!"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-header": {
|
||||
"message": "{name} törlése"
|
||||
@@ -588,7 +588,7 @@
|
||||
"message": "Kezdéshez adj hozzá egy szervert, vagy böngéssz"
|
||||
},
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "Nincs szerver vagy világ"
|
||||
"message": "Még nincs hozzáadva szerver vagy világ"
|
||||
},
|
||||
"app.instance.worlds.refreshing": {
|
||||
"message": "Újratöltés..."
|
||||
@@ -603,7 +603,7 @@
|
||||
"message": "Ez a szerver el lesz távolítva a szerverlistádból és a játékbeli szerverlistából is. Később újra hozzáadhatod, ha tudod a címet."
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.warning-header": {
|
||||
"message": "{name} törlése"
|
||||
"message": "{name} eltávolítása"
|
||||
},
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Keresés {count} világ között..."
|
||||
@@ -663,10 +663,10 @@
|
||||
"message": "Felhasználó letiltása"
|
||||
},
|
||||
"app.modal.install-to-play.content-you-are-reporting": {
|
||||
"message": "A játékprofil, amelyet bejelenteni kívánsz"
|
||||
"message": "A példány, amelyet bejelenteni kívánsz"
|
||||
},
|
||||
"app.modal.install-to-play.delete-instance": {
|
||||
"message": "Játékprofil törlése"
|
||||
"message": "Példány törlése"
|
||||
},
|
||||
"app.modal.install-to-play.external-files-dont-install": {
|
||||
"message": "Ne telepítse"
|
||||
@@ -690,7 +690,7 @@
|
||||
"message": "{count} mod"
|
||||
},
|
||||
"app.modal.install-to-play.report-description": {
|
||||
"message": "Ezzel az űrlapmal jelentsd be azokat az eseteket, amelyek megsérthetik a <rules-link>Szabályzatunkat</rules-link> vagy a <terms-link>Felhasználási feltételeinket</terms-link>."
|
||||
"message": "Ezt az űrlapot használva olyan példányokat jelenthetsz, amelyek megsérthetik a <rules-link>Szabályzatunkat</rules-link> vagy a <terms-link>Felhasználási feltételeinket</terms-link>."
|
||||
},
|
||||
"app.modal.install-to-play.report-image-invalid-type": {
|
||||
"message": "A fájl nem támogatott képfájlformátumot használ"
|
||||
@@ -702,19 +702,10 @@
|
||||
"message": "A DMCA-bejelentésekkel és egyéb jogi igényekkel kapcsolatban lásd a <copyright-link>Szerzői jogi szabályzatunkat</copyright-link>."
|
||||
},
|
||||
"app.modal.install-to-play.report-reason": {
|
||||
"message": "Melyik szabályt sérti meg ez az adott játékprofil?"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.inappropriate": {
|
||||
"message": "Nem megfelelő"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.malicious": {
|
||||
"message": "Káros"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.spam": {
|
||||
"message": "Spam"
|
||||
"message": "Melyik szabályt sérti ez az adott példány?"
|
||||
},
|
||||
"app.modal.install-to-play.report-shared-instance-header": {
|
||||
"message": "Megosztott játékprofil jelentése"
|
||||
"message": "Megosztott példány jelentése"
|
||||
},
|
||||
"app.modal.install-to-play.report-submitted": {
|
||||
"message": "Jelentés elküldve"
|
||||
@@ -723,19 +714,19 @@
|
||||
"message": "Ha segítségre van szükséged, vedd fel a kapcsolatot a <support-link>támogatási csapatunkkal</support-link>. Hibajelentésekhez nyiss egy <github-link>GitHub-issue-t</github-link>."
|
||||
},
|
||||
"app.modal.install-to-play.reviewed-files": {
|
||||
"message": "Egy fájlt csak akkor vizsgálnak meg, ha azt a Modrinth-en közzétették, függetlenül a fájlformátumtól (beleértve a .mrpack formátumot is)."
|
||||
"message": "Egy fájlt csak akkor vizsgálnak át, ha azt a Modrinthen közzétették, függetlenül a fájlformátumtól (beleértve az `.mrpack` formátumot is)."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Megosztott játékprofil"
|
||||
"message": "Megosztott példány"
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance-content": {
|
||||
"message": "A megosztott játékprofil tartalma"
|
||||
"message": "Megosztott példány tartalma"
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance-unknown-files-description": {
|
||||
"message": "Ez a megosztott játékprofil olyan fájlokat tartalmaz, amelyek nincsenek közzétéve a Modrinthon. Határozottan javasoljuk, hogy kizárólag olyan forrásokból telepíts fájlokat, amelyekben megbízol."
|
||||
"message": "Ez a megosztott példány olyan fájlokat tartalmaz, amelyek nincsenek közzétéve a Modrinth-on. Határozottan javasoljuk, hogy kizárólag olyan forrásokból telepíts fájlokat, amelyekben megbízol."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Ez a szerver-modpack olyan fájlokat tartalmaz, amelyek nem szerepelnek a Modrinth oldalon. Határozottan javasoljuk, hogy kizárólag olyan forrásokból telepíts fájlokat, amelyekben megbízol."
|
||||
"message": "Ez a szervermodcsomag olyan fájlokat tartalmaz, amelyeket nem tettek közzé a Modrinthen. Nyomatékosan javasoljuk, hogy csak megbízható forrásból származó fájlokat telepíts."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "Figyelmeztetés ismeretlen fájlokról"
|
||||
@@ -765,7 +756,7 @@
|
||||
"message": "Eltávolítva"
|
||||
},
|
||||
"app.modal.update-to-play.shared-instance-unknown-files-description": {
|
||||
"message": "Ez a megosztott játékprofil-frissítés olyan fájlokat tartalmaz, amelyek nincsenek közzétéve a Modrinthon. Határozottan javasoljuk, hogy kizárólag olyan forrásokból telepíts fájlokat, amelyekben megbízol."
|
||||
"message": "Ez a megosztott példányfrissítés olyan fájlokat tartalmaz, amelyek nincsenek közzétéve a Modrinth-on. Határozottan javasoljuk, hogy kizárólag olyan forrásokból telepíts fájlokat, amelyekben megbízol."
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Frissítés szükséges"
|
||||
@@ -774,7 +765,7 @@
|
||||
"message": "Egy frssítés szükséges a(z) {name} játékprofilhoz. Kérjük, frissítsd a játékot a legújabb verzióra az indításhoz."
|
||||
},
|
||||
"app.nav.create-new-instance": {
|
||||
"message": "Új játékprofil létrehozása"
|
||||
"message": "Új példány létrehozása"
|
||||
},
|
||||
"app.nav.home": {
|
||||
"message": "Kezdőlap"
|
||||
@@ -813,7 +804,7 @@
|
||||
"message": "Vissza a böngészéshez"
|
||||
},
|
||||
"app.project.install-context.back-to-instance": {
|
||||
"message": "Vissza a játékprofilhoz"
|
||||
"message": "Vissza a példányhoz"
|
||||
},
|
||||
"app.project.version.all-versions": {
|
||||
"message": "Összes verzió"
|
||||
@@ -828,7 +819,7 @@
|
||||
"message": "Már telepítve van"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-show-tooltip": {
|
||||
"message": "Húzd el a legutóbbi játékprofilok megjelenítéséhez"
|
||||
"message": "Húzd el a legutóbbi példányok megjelenítéséhez"
|
||||
},
|
||||
"app.quick-instance-switcher.drag-tooltip": {
|
||||
"message": "Átméretezés húzással"
|
||||
@@ -840,7 +831,7 @@
|
||||
"message": "Modrinth App {version}"
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.description": {
|
||||
"message": "A játékprofil indításakor beállított környezeti változók."
|
||||
"message": "A példány indításakor beállított környezeti változók."
|
||||
},
|
||||
"app.settings.default-instance-options.environment-variables.placeholder": {
|
||||
"message": "Adj meg környezeti változókat..."
|
||||
@@ -849,7 +840,7 @@
|
||||
"message": "Környezeti változók"
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.description": {
|
||||
"message": "A játékprofilok elindítása teljes képernyős módban az options.txt fájl frissítésével."
|
||||
"message": "A példányok elindítása teljes képernyős módban az options.txt fájl frissítésével."
|
||||
},
|
||||
"app.settings.default-instance-options.fullscreen.title": {
|
||||
"message": "Teljes képernyő"
|
||||
@@ -864,7 +855,7 @@
|
||||
"message": "Magasság"
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.description": {
|
||||
"message": "A Javának a játékprofil indításakor átadott paraméterek."
|
||||
"message": "A Javának a példány indításakor átadott paraméterek."
|
||||
},
|
||||
"app.settings.default-instance-options.java-arguments.placeholder": {
|
||||
"message": "Java-indítási paraméterek megadása..."
|
||||
@@ -873,7 +864,7 @@
|
||||
"message": "Java-indítási paraméterek"
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.description": {
|
||||
"message": "Az egyes játékprofilok számára rendelkezésre álló maximális memória."
|
||||
"message": "Az egyes példányok számára rendelkezésre álló maximális memória."
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.title": {
|
||||
"message": "Memóriakeret"
|
||||
@@ -888,7 +879,7 @@
|
||||
"message": "Kilépés utáni parancs"
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.description": {
|
||||
"message": "A játékprofil indítása előtt fut le."
|
||||
"message": "A példány indítása előtt fut le."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.placeholder": {
|
||||
"message": "Adj meg egy indítás előtti parancsot..."
|
||||
@@ -933,7 +924,7 @@
|
||||
"message": "A hirdetések teszik lehetővé a Modrinth működését, és biztosítják a tartalomkészítők juttatásait. Partnereink sütiket tárolhatnak vagy érhetnek el az alkalmazásban a hirdetések személyre szabása és a teljesítmény mérése céljából. Alább leiratkozhatsz erről, illetve beállíthatod a preferenciáidat."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.description": {
|
||||
"message": "A Modrinth App megjelenítése aktuális tevékenységként a Discordon. Ez nem érinti a modok által a játékprofilokhoz hozzáadott Rich Presence-t. Az alkalmazás újraindítását igényli."
|
||||
"message": "A Modrinth App megjelenítése aktuális tevékenységként a Discordon. Ez nem érinti a modok által a példányokhoz hozzáadott Rich Presence-t. Az alkalmazás újraindítását igényli."
|
||||
},
|
||||
"app.settings.privacy.discord-rich-presence.title": {
|
||||
"message": "Discord Rich Presence"
|
||||
@@ -978,7 +969,7 @@
|
||||
"message": "Alkalmazáskönyvtár tallózása"
|
||||
},
|
||||
"app.settings.resource-management.app-directory.description": {
|
||||
"message": "A Modrinth App ebben a mappában tárolja a játékprofilokat és az egyéb fájlokat. A módosítások az alkalmazás újraindítása után lépnek érvénybe."
|
||||
"message": "A Modrinth App ebben a mappában tárolja a példányokat és az egyéb fájlokat. A módosítások az alkalmazás újraindítása után lépnek érvénybe."
|
||||
},
|
||||
"app.settings.resource-management.app-directory.select": {
|
||||
"message": "Új alkalmazáskönyvtár kiválasztása"
|
||||
@@ -999,7 +990,7 @@
|
||||
"message": "Maximális egyidejű írási műveletek"
|
||||
},
|
||||
"app.settings.sidebar.label.instances": {
|
||||
"message": "Játékprofilok"
|
||||
"message": "Példányok"
|
||||
},
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Megjelenés"
|
||||
@@ -1041,7 +1032,7 @@
|
||||
"message": "Ezzel a kiválasztott kinézet véglegesen törlődik. Ez a művelet visszafordíthatatlan."
|
||||
},
|
||||
"app.skins.delete-modal.title": {
|
||||
"message": "Biztos, hogy le akarod törölni ezt a kinézetet?"
|
||||
"message": "Biztosan törölni szeretnéd ezt a kinézetet?"
|
||||
},
|
||||
"app.skins.dropped-file-error.text": {
|
||||
"message": "Nem sikerült beolvasni a feltöltött fájlt."
|
||||
@@ -1110,7 +1101,7 @@
|
||||
"message": "Előnézet"
|
||||
},
|
||||
"app.skins.rate-limit.text": {
|
||||
"message": "Túl gyakran cseréled a kinézetedet. A Mojang szerverei ideiglenesen letiltották a további cseréket. Kérlek várj egy pillanatot, majd próbáld meg újra."
|
||||
"message": "Túl gyakran cseréled a kinézetedet. A Mojang szerverei ideiglenesen letiltották a további kéréseket. Várj egy kis ideig, majd próbáld újra."
|
||||
},
|
||||
"app.skins.rate-limit.title": {
|
||||
"message": "Lassíts!"
|
||||
@@ -1200,13 +1191,13 @@
|
||||
"message": "Hali, Modrinth-felhasználó!"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "A Modrinth App v{version} letöltése befejeződött. Frissítéshez válaszd ki a Frissítés opciót, vagy az alkalmazás a bezárásakor automatikusan frissül."
|
||||
"message": "A Modrinth App v{version} letöltése befejeződött. Válaszd a Frissítés lehetőséget a frissítéshez, vagy az alkalmazás bezárásakor automatikusan frissül."
|
||||
},
|
||||
"app.update-popup.body.linux": {
|
||||
"message": "A Modrinth App v{version} elérhető. Használd a csomagkezelőt a legújabb funkciók és javítások frissítéséhez!"
|
||||
"message": "A Modrinth App v{version} elérhető. A legújabb funkciókért és javításokért frissíts a csomagkezelőddel!"
|
||||
},
|
||||
"app.update-popup.body.metered": {
|
||||
"message": "A Modrinth App v{version} már elérhető! Mivel mérhető hálózaton vagy, nem töltöttük le automatikusan."
|
||||
"message": "A Modrinth App v{version} már elérhető! Mivel korlátozott adatforgalmú hálózaton vagy, nem töltöttük le automatikusan."
|
||||
},
|
||||
"app.update-popup.changelog": {
|
||||
"message": "Változásnapló"
|
||||
@@ -1229,6 +1220,9 @@
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "Verzió {version} sikeresen telepítve!"
|
||||
},
|
||||
"app.user.project.install-to-instance": {
|
||||
"message": "Telepítés a példányba"
|
||||
},
|
||||
"app.world.server-modal.placeholder-address": {
|
||||
"message": "pelda.modrinth.gg"
|
||||
},
|
||||
@@ -1248,10 +1242,10 @@
|
||||
"message": "{count} online"
|
||||
},
|
||||
"content.shared-instance.change-version-body": {
|
||||
"message": "A verzió módosítása csak a helyi játékprofilt érinti. A megosztott játékprofil jövőbeli frissítései felülírhatják vagy ismét megváltoztathatják azt."
|
||||
"message": "A verzió módosítása csak a helyi példányt érinti. A megosztott példány jövőbeli frissítései felülírhatják vagy ismét megváltoztathatják azt."
|
||||
},
|
||||
"content.shared-instance.delete-bulk-body": {
|
||||
"message": "A kiválasztott projektek egy része a megosztott játékprofil része. Törlésük csak a helyi játékprofilt módosítja, és a megosztott játékprofil jövőbeli frissítései visszaállíthatják vagy ismét módosíthatják őket."
|
||||
"message": "A kiválasztott projektek egy része a megosztott példány része. Törlésük csak a helyi példányt módosítja, és a megosztott példány jövőbeli frissítései visszaállíthatják vagy ismét módosíthatják őket."
|
||||
},
|
||||
"content.shared-instance.delete-button": {
|
||||
"message": "Törlés mindenképp"
|
||||
@@ -1260,10 +1254,10 @@
|
||||
"message": "{count, number} projekt törlése mindenképp"
|
||||
},
|
||||
"content.shared-instance.delete-single-body": {
|
||||
"message": "A törlése csak a helyi játékprofilt módosítja. A megosztott játékprofil jövőbeli frissítései visszaállíthatják vagy ismét módosíthatják."
|
||||
"message": "A törlése csak a helyi példányt módosítja. A megosztott példány jövőbeli frissítései visszaállíthatják vagy ismét módosíthatják."
|
||||
},
|
||||
"content.shared-instance.disable-bulk-body": {
|
||||
"message": "A kiválasztott projektek egy része a megosztott játékprofil része. Letiltásuk csak a helyi játékprofilt módosítja, és a megosztott játékprofil jövőbeli frissítései újra engedélyezhetik, visszaállíthatják vagy ismét módosíthatják őket."
|
||||
"message": "A kiválasztott projektek egy része a megosztott példány része. Letiltásuk csak a helyi példányt módosítja, és a megosztott példány jövőbeli frissítései újra engedélyezhetik, visszaállíthatják vagy ismét módosíthatják őket."
|
||||
},
|
||||
"content.shared-instance.disable-button": {
|
||||
"message": "Letíltás mindenképp"
|
||||
@@ -1272,13 +1266,13 @@
|
||||
"message": "{count, number} projekt letíltása mindenképp"
|
||||
},
|
||||
"content.shared-instance.disable-single-body": {
|
||||
"message": "A letiltása csak a helyi játékprofilt módosítja. A megosztott játékprofil jövőbeli frissítései újra engedélyezhetik, visszaállíthatják vagy ismét módosíthatják."
|
||||
"message": "A letiltása csak a helyi példányt módosítja. A megosztott példány jövőbeli frissítései újra engedélyezhetik, visszaállíthatják vagy ismét módosíthatják."
|
||||
},
|
||||
"content.shared-instance.unlink-body": {
|
||||
"message": "A leválasztás csak a helyi játékprofilt érinti. A megosztott játékprofil jövőbeli frissítései felülírhatják vagy ismét megváltoztathatják azt."
|
||||
"message": "A leválasztás csak a helyi példányt érinti. A megosztott példány jövőbeli frissítései felülírhatják vagy ismét megváltoztathatják azt."
|
||||
},
|
||||
"content.shared-instance.warning-header": {
|
||||
"message": "Ez egy megosztott játékprofil része"
|
||||
"message": "Ez egy megosztott példány része"
|
||||
},
|
||||
"friends.action.add-friend": {
|
||||
"message": "Barát hozzáadása"
|
||||
@@ -1344,46 +1338,46 @@
|
||||
"message": "<link>Lépj be Modrinth fiókodba</link>, hogy felvehess barátokat és lásd mivel játszanak!"
|
||||
},
|
||||
"installation-settings.shared-instance.linked-title": {
|
||||
"message": "Összekapcsolt megosztott játékprofil"
|
||||
"message": "Összekapcsolt megosztott példány"
|
||||
},
|
||||
"installation-settings.shared-instance.title": {
|
||||
"message": "Játékprofil megosztásának visszavonása"
|
||||
"message": "Példány megosztásának visszavonása"
|
||||
},
|
||||
"installation-settings.shared-instance.unlink-button": {
|
||||
"message": "Megosztott játékprofil leválasztása"
|
||||
"message": "Megosztott példány leválasztása"
|
||||
},
|
||||
"installation-settings.shared-instance.unlink-description": {
|
||||
"message": "Leválasztja ezt a helyi játékprofilt a jövőbeli megosztott frissítésekről."
|
||||
"message": "Leválasztja ezt a helyi példányt a jövőbeli megosztott frissítésekről."
|
||||
},
|
||||
"installation-settings.shared-instance.unlinking-button": {
|
||||
"message": "Leválasztás..."
|
||||
},
|
||||
"installation-settings.shared-instance.unpublish-button": {
|
||||
"message": "Megosztott játékprofil megosztásának visszavonása"
|
||||
"message": "Megosztott példány megosztásának visszavonása"
|
||||
},
|
||||
"installation-settings.shared-instance.unpublish-description": {
|
||||
"message": "Eltávolítja ezt a megosztott játékprofilt a Modrinthból, és nem küld többé frissítéseket azoknak, akik használják. A helyi játékprofilodat ez nem érinti."
|
||||
"message": "Eltávolítja ezt a megosztott példányt a Modrinthból, és nem küld többé frissítéseket azoknak, akik használják. A helyi példányodat ez nem érinti."
|
||||
},
|
||||
"installation-settings.shared-instance.unpublishing-button": {
|
||||
"message": "Közzététel visszavonása..."
|
||||
},
|
||||
"installation-settings.unlink-shared-instance.modal.admonition-body": {
|
||||
"message": "Ez kizárólag a helyi játékprofilodra vonatkozik. A telepített tartalmaid ezen az eszközön maradnak, és ez nem érinti a megosztott játékprofilt, illetve az azt használó többi felhasználót."
|
||||
"message": "Ez kizárólag a helyi példányodra vonatkozik. A telepített tartalmaid ezen az eszközön maradnak, és ez nem érinti a megosztott példányt, illetve az azt használó többi felhasználót."
|
||||
},
|
||||
"installation-settings.unlink-shared-instance.modal.admonition-header": {
|
||||
"message": "Megosztott játékprofil leválasztása"
|
||||
},
|
||||
"installation-settings.unlink-shared-instance.modal.header": {
|
||||
"message": "Megosztott játékprofil leválasztása"
|
||||
"message": "Megosztott példány leválasztása"
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.admonition-body": {
|
||||
"message": "Ezzel a megosztott játékprofil törlődik a Modrinth szervereiről. A Modrinth Appban az ezt használók többé nem kapnak frissítéseket, de a helyi játékprofil és annak tartalma továbbra is ezen az eszközön marad."
|
||||
"message": "Ezzel a megosztott példány törlődik a Modrinth szervereiről. A Modrinth Appban az ezt használók többé nem kapnak frissítéseket, de a helyipéldány és annak tartalma továbbra is ezen az eszközön marad."
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.admonition-header": {
|
||||
"message": "Visszavonod a megosztott játékprofil megosztását"
|
||||
"message": "Visszavonod a megosztott példány megosztását"
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.header": {
|
||||
"message": "Megosztott játékprofil megosztásának visszavonása"
|
||||
"message": "Megosztott példány megosztásának visszavonása"
|
||||
},
|
||||
"instance.action.create-shortcut": {
|
||||
"message": "Parancsikon létrehozása"
|
||||
@@ -1392,7 +1386,7 @@
|
||||
"message": "Modcsomag exportálása"
|
||||
},
|
||||
"instance.action.launch-instance": {
|
||||
"message": "Játékprofil elindítása"
|
||||
"message": "Példány elindítása"
|
||||
},
|
||||
"instance.action.more-actions": {
|
||||
"message": "További műveletek"
|
||||
@@ -1404,7 +1398,7 @@
|
||||
"message": "Javítás"
|
||||
},
|
||||
"instance.action.settings": {
|
||||
"message": "Játékprofil beállításai"
|
||||
"message": "Példány beállításai"
|
||||
},
|
||||
"instance.action.starting": {
|
||||
"message": "Indítás..."
|
||||
@@ -1449,16 +1443,16 @@
|
||||
"message": "Világ szerkesztése"
|
||||
},
|
||||
"instance.files.adding-files": {
|
||||
"message": "Fájlok hozzáadása... ({completed}/{total})"
|
||||
"message": "Fájlok hozzáadása ({completed}/{total})"
|
||||
},
|
||||
"instance.files.save-as": {
|
||||
"message": "Mentés másként..."
|
||||
},
|
||||
"instance.locked.delete-button": {
|
||||
"message": "Játékprofil törlése"
|
||||
"message": "Példány törlése"
|
||||
},
|
||||
"instance.locked.play-tooltip": {
|
||||
"message": "Ez a játékprofil zárolva van"
|
||||
"message": "Ez a példány zárolva van"
|
||||
},
|
||||
"instance.playtime.never-played": {
|
||||
"message": "Még nem játszott"
|
||||
@@ -1518,13 +1512,13 @@
|
||||
"message": "Általános"
|
||||
},
|
||||
"instance.settings.tabs.general.delete": {
|
||||
"message": "Játékprofil törlése"
|
||||
"message": "Példány törlése"
|
||||
},
|
||||
"instance.settings.tabs.general.delete.button": {
|
||||
"message": "Játékprofil törlése"
|
||||
"message": "Példány törlése"
|
||||
},
|
||||
"instance.settings.tabs.general.delete.description": {
|
||||
"message": "Örökké eltávolít egy játékprofilt az eszközről, beleértve a világait, beállításait és minden telepített tartalmat. Legyél óvatos, mert ha egyszer kitörölsz egy játékprofilt, azt többé nem lehet visszaállítani."
|
||||
"message": "Örökké eltávolít egy példányt az eszközről, beleértve a világait, beállításait és minden telepített tartalmat. Legyél óvatos, mert ha egyszer kitörölsz egy példányt, azt többé nem lehet visszaállítani."
|
||||
},
|
||||
"instance.settings.tabs.general.deleting.button": {
|
||||
"message": "Törlés..."
|
||||
@@ -1536,10 +1530,10 @@
|
||||
"message": "Telepítés közben nem lehet duplikálni."
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-instance": {
|
||||
"message": "Játékprofil duplikálása"
|
||||
"message": "Példány megkettőzése"
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-instance.description": {
|
||||
"message": "Készít egy másolatot erről a játékprofilról, beleértve a világokat, beállításokat, modokat stb."
|
||||
"message": "Készít egy másolatot erről a példányról, beleértve a világokat, beállításokat, modokat stb."
|
||||
},
|
||||
"instance.settings.tabs.general.edit-icon": {
|
||||
"message": "Ikon szerkesztése"
|
||||
@@ -1557,10 +1551,10 @@
|
||||
"message": "Könyvtárgyűjtemények"
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups.create": {
|
||||
"message": "Új gyűjtemény létrehozása"
|
||||
"message": "Új csoport létrehozása"
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups.description": {
|
||||
"message": "A könyvtárgyűjtemények segítenek külön kategóriákba rendszerezni a játékprofilokat."
|
||||
"message": "A könyvtárgyűjtemények segítenek külön kategóriákba rendszerezni a példányokat."
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups.enter-name": {
|
||||
"message": "Add meg a gyűjtemény nevét"
|
||||
@@ -1622,6 +1616,12 @@
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Játék indítási horgok"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-mc-dir.description": {
|
||||
"message": "$INST_MC_DIR: A(z) $INST_DIR álneve"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-name.description": {
|
||||
"message": "$INST_NAME: A példány neve"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper": {
|
||||
"message": "Indítóparancs"
|
||||
},
|
||||
@@ -1638,7 +1638,7 @@
|
||||
"message": "{loader} verzió"
|
||||
},
|
||||
"instance.settings.tabs.installation.locked": {
|
||||
"message": "A telepítési beállítások nem érhetők el, amíg ez a játékprofil zárolva van."
|
||||
"message": "A telepítési beállítások nem érhetők el, amíg ez a példány zárolva van."
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java és memória"
|
||||
@@ -1677,7 +1677,7 @@
|
||||
"message": "Hozzárendelt memória"
|
||||
},
|
||||
"instance.settings.tabs.java.java-path-placeholder": {
|
||||
"message": "/eleresi/ut/a/javahoz"
|
||||
"message": "/path/to/java"
|
||||
},
|
||||
"instance.settings.tabs.sharing": {
|
||||
"message": "Megosztás"
|
||||
@@ -1716,13 +1716,13 @@
|
||||
"message": "Valami hiba történt"
|
||||
},
|
||||
"instance.shared-instance.network-error.text": {
|
||||
"message": "Nem sikerült csatlakozni a megosztott játékprofilok API-jához"
|
||||
"message": "Nem sikerült csatlakozni a megosztott példányok API-jához"
|
||||
},
|
||||
"instance.shared-instance.network-error.title": {
|
||||
"message": "Hálózati hiba"
|
||||
},
|
||||
"instance.shared-instance.owner-tooltip": {
|
||||
"message": "Ennek a játékprofilnak a tartalma meg van osztva más felhasználókkal."
|
||||
"message": "Ennek a példánynak a tartalma meg van osztva más felhasználókkal."
|
||||
},
|
||||
"instance.shared-instance.publish-review.added-label": {
|
||||
"message": "Hozzáadva:"
|
||||
@@ -1746,28 +1746,28 @@
|
||||
"message": "Eltávolítva:"
|
||||
},
|
||||
"instance.shared-instance.tooltip": {
|
||||
"message": "Ennek a játékprofilynak a tartalmát más kezeli."
|
||||
"message": "Ennek a példánynak a tartalmát más kezeli."
|
||||
},
|
||||
"instance.shared-instance.unavailable.access-revoked-text": {
|
||||
"message": "A megosztott játékprofilhoz való hozzáférésedet visszavonták. Ez a játékprofil továbbra is elérhető, de már nincs összekapcsolva, és többé nem kap frissítéseket."
|
||||
"message": "A megosztott példányhoz való hozzáférésedet megvonták. Ez a példány továbbra is elérhető, de már nincs összekapcsolva, és többé nem kap frissítéseket."
|
||||
},
|
||||
"instance.shared-instance.unavailable.deleted-text": {
|
||||
"message": "Az elsődleges játékprofilt törölték. Ez a játékprofil továbbra is elérhető, de már nincs összekapcsolva, és többé nem kap frissítéseket."
|
||||
"message": "Az elsődleges példányt törölték. Ez a példány továbbra is elérhető, de már nincs összekapcsolva, és többé nem kap frissítéseket."
|
||||
},
|
||||
"instance.shared-instance.unavailable.locked-text": {
|
||||
"message": "Ezt a megosztott játékprofilt a Tartalommoderációs csapat zárolta. Többé nem kap frissítéseket az elsődleges játékprofiltól, és nem lehet játszani vele."
|
||||
"message": "Ezt a megosztott példányt a Tartalommoderációs csapat zárolta. Többé nem kap frissítéseket az elsődleges példánytól, és nem lehet játszani vele."
|
||||
},
|
||||
"instance.shared-instance.unavailable.locked-title": {
|
||||
"message": "Játékprofil zárolva"
|
||||
"message": "Példány zárolva"
|
||||
},
|
||||
"instance.shared-instance.unavailable.manager-fallback": {
|
||||
"message": "a játékprofil-kezelő"
|
||||
"message": "a példánykezelő"
|
||||
},
|
||||
"instance.shared-instance.unavailable.text": {
|
||||
"message": "A te gépeden lévő játékprofil továbbra is elérhető, de már nincs összekapcsolva, és többé nem kap frissítéseket."
|
||||
"message": "A helyi példányod továbbra is elérhető, de már nincs összekapcsolva, és többé nem kap frissítéseket."
|
||||
},
|
||||
"instance.shared-instance.unavailable.title": {
|
||||
"message": "A megosztott játékprofil már nem elérhető"
|
||||
"message": "A megosztott példány már nem elérhető"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Egy Minecraft szerver"
|
||||
@@ -1785,7 +1785,7 @@
|
||||
"message": "Ne mutasd a kezdőlapon"
|
||||
},
|
||||
"instance.worlds.game_already_open": {
|
||||
"message": "A játékprofil már el van indítva"
|
||||
"message": "A példány már el van indítva"
|
||||
},
|
||||
"instance.worlds.hardcore": {
|
||||
"message": "Hardcore mód"
|
||||
@@ -1803,13 +1803,13 @@
|
||||
"message": "Csak Minecraft Alpha 1.0.5+-tól tudsz egyből szerverhez csatlakozni"
|
||||
},
|
||||
"instance.worlds.no_singleplayer_quick_play": {
|
||||
"message": "Csak Minecraft 1.20+-tól tudsz egyből egyjátékos világba belépni"
|
||||
"message": "Használj 1.20+ verziót az azonnali egyjátékos módba lépéshez"
|
||||
},
|
||||
"instance.worlds.play_instance": {
|
||||
"message": "Játékprofil indítása"
|
||||
"message": "Példány indítása"
|
||||
},
|
||||
"instance.worlds.view_instance": {
|
||||
"message": "Játékprofil megtekintése"
|
||||
"message": "Példány megtekintése"
|
||||
},
|
||||
"instance.worlds.world_in_use": {
|
||||
"message": "A világ használatban van"
|
||||
@@ -1887,25 +1887,25 @@
|
||||
"message": "Várakozás a böngésző megerősítésére..."
|
||||
},
|
||||
"search.filter.locked.instance": {
|
||||
"message": "A játékprofil által van megadva"
|
||||
"message": "Pédány által megadva"
|
||||
},
|
||||
"search.filter.locked.instance-game-version.title": {
|
||||
"message": "A játékverziót az adott játékprofil biztosítja"
|
||||
"message": "A játékverziót az adott példány biztosítja"
|
||||
},
|
||||
"search.filter.locked.instance-loader.title": {
|
||||
"message": "A betöltőt az adott játékprofil biztosítja"
|
||||
"message": "A betöltőt az adott példány biztosítja"
|
||||
},
|
||||
"search.filter.locked.instance.sync": {
|
||||
"message": "Szinkronizálás a játékpéldánnyal"
|
||||
"message": "Szinkronizálás a példánnyal"
|
||||
},
|
||||
"search.filter.locked.server": {
|
||||
"message": "A szerver által van megadva"
|
||||
},
|
||||
"search.filter.locked.server-environment.title": {
|
||||
"message": "Csak kliensoldali modok adhatók hozzá a szerverprofilhoz"
|
||||
"message": "Szerverpéldányokhoz csak szerveroldali modok adhatók hozzá"
|
||||
},
|
||||
"search.filter.locked.server-game-version.title": {
|
||||
"message": "A játékverziót az adott szerver biztosítja"
|
||||
"message": "A játékverzió a szerver által van megadva"
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "A betöltőt az adott szerver biztosítja"
|
||||
|
||||
@@ -393,7 +393,7 @@
|
||||
"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"
|
||||
@@ -564,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}"
|
||||
@@ -701,15 +701,6 @@
|
||||
"app.modal.install-to-play.report-reason": {
|
||||
"message": "Quale regola è violata da quest'istanza?"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.inappropriate": {
|
||||
"message": "Inappropriato"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.malicious": {
|
||||
"message": "Dannoso"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.spam": {
|
||||
"message": "Spam"
|
||||
},
|
||||
"app.modal.install-to-play.report-shared-instance-header": {
|
||||
"message": "Segnala istanza condivisa"
|
||||
},
|
||||
@@ -1035,7 +1026,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?"
|
||||
@@ -1226,6 +1217,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"
|
||||
},
|
||||
@@ -1503,7 +1497,7 @@
|
||||
"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 non può essere annullata"
|
||||
"message": "Questa azione è irreversibile"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.confirm": {
|
||||
"message": "Revoca invito"
|
||||
@@ -1619,6 +1613,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"
|
||||
},
|
||||
|
||||
@@ -516,7 +516,7 @@
|
||||
"message": "インスタンスの共有は現在ご利用いただけません。しばらくしてからもう一度お試しください"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.heading": {
|
||||
"message": "接続できません"
|
||||
"message": "接続エラー"
|
||||
},
|
||||
"app.instance.share.unlink.body": {
|
||||
"message": "この起動構成を共有するには、このmodpackのリンクを解除する必要があります"
|
||||
@@ -590,6 +590,9 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "サーバー、ワールドは追加されていません"
|
||||
},
|
||||
"app.instance.worlds.refreshing": {
|
||||
"message": "更新中…"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "サーバーを削除"
|
||||
},
|
||||
@@ -701,15 +704,6 @@
|
||||
"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": "共有された起動構成を通報する"
|
||||
},
|
||||
@@ -1226,6 +1220,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"
|
||||
},
|
||||
@@ -1619,6 +1616,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": "ラッパー"
|
||||
},
|
||||
|
||||
@@ -701,15 +701,6 @@
|
||||
"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": "공유 인스턴스 신고"
|
||||
},
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
"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"
|
||||
},
|
||||
@@ -11,6 +14,9 @@
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Disalin"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Salin butiran"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Ketepikan"
|
||||
},
|
||||
@@ -239,9 +245,6 @@
|
||||
"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"
|
||||
},
|
||||
|
||||
@@ -590,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"
|
||||
},
|
||||
@@ -701,15 +704,6 @@
|
||||
"app.modal.install-to-play.report-reason": {
|
||||
"message": "Welke regel wordt in deze instantie overtreden?"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.inappropriate": {
|
||||
"message": "Ongepast"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.malicious": {
|
||||
"message": "Kwaadaardig"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.spam": {
|
||||
"message": "Spam"
|
||||
},
|
||||
"app.modal.install-to-play.report-shared-instance-header": {
|
||||
"message": "Gedeelde instantie melden"
|
||||
},
|
||||
@@ -932,9 +926,78 @@
|
||||
"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": "Standaard spelopties"
|
||||
},
|
||||
@@ -1157,6 +1220,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"
|
||||
},
|
||||
@@ -1427,6 +1493,21 @@
|
||||
"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"
|
||||
},
|
||||
@@ -1535,6 +1616,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"
|
||||
},
|
||||
@@ -1628,6 +1730,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."
|
||||
},
|
||||
@@ -1816,5 +1924,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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -461,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?"
|
||||
},
|
||||
@@ -545,6 +554,9 @@
|
||||
"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"
|
||||
},
|
||||
@@ -602,6 +614,9 @@
|
||||
"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"
|
||||
},
|
||||
@@ -632,6 +647,9 @@
|
||||
"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}}"
|
||||
},
|
||||
@@ -650,15 +668,6 @@
|
||||
"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": "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ś przesłaną Instalacje"
|
||||
},
|
||||
@@ -677,6 +686,9 @@
|
||||
"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."
|
||||
},
|
||||
@@ -705,7 +717,7 @@
|
||||
"message": "Usunięto"
|
||||
},
|
||||
"app.modal.update-to-play.shared-instance-unknown-files-description": {
|
||||
"message": "Ta aktualizacja przesłanej instancji zawiera pliki, które nie zostały opublikowane na Modrinth. Zalecamy instalowanie tych plików z źródła, któremu 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"
|
||||
@@ -863,6 +875,9 @@
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "Wygląd"
|
||||
},
|
||||
"app.settings.tabs.behavior": {
|
||||
"message": "Zachowanie"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Domyślne opcje gry"
|
||||
},
|
||||
@@ -1079,6 +1094,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"
|
||||
},
|
||||
@@ -1178,6 +1196,9 @@
|
||||
"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ę"
|
||||
},
|
||||
@@ -1187,9 +1208,21 @@
|
||||
"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"
|
||||
},
|
||||
@@ -1259,6 +1292,9 @@
|
||||
"instance.files.save-as": {
|
||||
"message": "Zapisz jako..."
|
||||
},
|
||||
"instance.locked.delete-button": {
|
||||
"message": "Usuń instancję"
|
||||
},
|
||||
"instance.playtime.never-played": {
|
||||
"message": "Nigdy nie grano"
|
||||
},
|
||||
|
||||
@@ -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"
|
||||
@@ -51,7 +51,7 @@
|
||||
"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"
|
||||
@@ -704,15 +704,6 @@
|
||||
"app.modal.install-to-play.report-reason": {
|
||||
"message": "Qual regra esta instância viola?"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.inappropriate": {
|
||||
"message": "Inapropriado"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.malicious": {
|
||||
"message": "Malicioso"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.spam": {
|
||||
"message": "Spam"
|
||||
},
|
||||
"app.modal.install-to-play.report-shared-instance-header": {
|
||||
"message": "Denunciar instância compartilhada"
|
||||
},
|
||||
@@ -1229,6 +1220,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"
|
||||
},
|
||||
@@ -1622,6 +1616,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"
|
||||
},
|
||||
|
||||
@@ -1,10 +1,130 @@
|
||||
{
|
||||
"app.action-bar.downloading-java": {
|
||||
"message": "Se descarcă Java {version}"
|
||||
},
|
||||
"app.action-bar.downloading-update": {
|
||||
"message": "Se descarcă actualizarea"
|
||||
},
|
||||
"app.action-bar.downloads": {
|
||||
"message": "Descărcări"
|
||||
},
|
||||
"app.action-bar.install.copied-details": {
|
||||
"message": "Copiat"
|
||||
},
|
||||
"app.action-bar.install.copy-details": {
|
||||
"message": "Copiază detaliile"
|
||||
},
|
||||
"app.action-bar.install.dismiss": {
|
||||
"message": "Ignoră"
|
||||
},
|
||||
"app.action-bar.install.open-instance": {
|
||||
"message": "Instanța nouă"
|
||||
},
|
||||
"app.action-bar.install.retry": {
|
||||
"message": "Reîncearcă"
|
||||
},
|
||||
"app.action-bar.install.summary.canceled": {
|
||||
"message": "Anulat"
|
||||
},
|
||||
"app.action-bar.install.summary.could-not-save-files": {
|
||||
"message": "Nu s-au putut salva fișierele"
|
||||
},
|
||||
"app.action-bar.offline": {
|
||||
"message": "Offline"
|
||||
},
|
||||
"app.action-bar.update": {
|
||||
"message": "Actualizează"
|
||||
},
|
||||
"app.action-bar.view-active-downloads": {
|
||||
"message": "Vezi descărcările active"
|
||||
},
|
||||
"app.action-bar.view-instance": {
|
||||
"message": "Vezi instanțele"
|
||||
},
|
||||
"app.action-bar.view-logs": {
|
||||
"message": "Vezi jurnalele"
|
||||
},
|
||||
"app.ads-consent.accept": {
|
||||
"message": "Acceptă tot"
|
||||
},
|
||||
"app.ads-consent.reject": {
|
||||
"message": "Refuză tot"
|
||||
},
|
||||
"app.auth-servers.unreachable.body": {
|
||||
"message": "Serverele de autentificare Minecraft pot fi indisponibile în acest moment. Verificați conexiunea la internet și încercați din nou mai târziu."
|
||||
},
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Nu se pot accesa serverele de autentificare"
|
||||
},
|
||||
"app.browse.added": {
|
||||
"message": "Adăugat"
|
||||
},
|
||||
"app.browse.already-added": {
|
||||
"message": "Deja adăugat"
|
||||
},
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "Înapoi la instanță"
|
||||
},
|
||||
"app.browse.discover-project-type": {
|
||||
"message": "Descoperă {projectType}"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Descoperă servere"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Ascunde serverele deja adăugate"
|
||||
},
|
||||
"app.browse.server.installing": {
|
||||
"message": "Se instalează"
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Exportă"
|
||||
},
|
||||
"app.export-modal.version-number-placeholder": {
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.install.phase.finalizing": {
|
||||
"message": "Se finalizează"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.added-label": {
|
||||
"message": "Adăugat"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create": {
|
||||
"message": "Creează"
|
||||
},
|
||||
"app.instance.share.sign-in.button": {
|
||||
"message": "Conectează-te"
|
||||
},
|
||||
"app.instance.shared-instance-already-installed.instance": {
|
||||
"message": "Instanță"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.delete-button": {
|
||||
"message": "Șterge lumea"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.title": {
|
||||
"message": "Șterge lumea"
|
||||
},
|
||||
"app.instance.worlds.delete-world-modal.warning-header": {
|
||||
"message": "Se șterge {name}"
|
||||
},
|
||||
"app.instance.worlds.filter-offline": {
|
||||
"message": "Offline"
|
||||
},
|
||||
"app.instance.worlds.filter-online": {
|
||||
"message": "Online"
|
||||
},
|
||||
"app.instance.worlds.filter-vanilla": {
|
||||
"message": "Vanilla"
|
||||
},
|
||||
"app.instance.worlds.refreshing": {
|
||||
"message": "Se reîmprospătează..."
|
||||
},
|
||||
"app.java-detection.cancel": {
|
||||
"message": "Anulează"
|
||||
},
|
||||
"app.java-detection.columns.actions": {
|
||||
"message": "Acțiuni"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Instalați pentru a juca"
|
||||
},
|
||||
|
||||
@@ -695,15 +695,6 @@
|
||||
"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": "Сообщить об общем экземпляре"
|
||||
},
|
||||
@@ -1220,6 +1211,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"
|
||||
},
|
||||
@@ -1338,7 +1332,7 @@
|
||||
"message": "Связанная сборка"
|
||||
},
|
||||
"installation-settings.shared-instance.title": {
|
||||
"message": "Отменить публикацию экземпляра"
|
||||
"message": "Закрытие доступа"
|
||||
},
|
||||
"installation-settings.shared-instance.unlink-button": {
|
||||
"message": "Отвязать сборку"
|
||||
@@ -1350,13 +1344,13 @@
|
||||
"message": "Отвязка..."
|
||||
},
|
||||
"installation-settings.shared-instance.unpublish-button": {
|
||||
"message": "Отменить публикацию общего экземпляра"
|
||||
"message": "Закрыть доступ к сборке"
|
||||
},
|
||||
"installation-settings.shared-instance.unpublish-description": {
|
||||
"message": "Удалите этот общий экземпляр из Modrinth и прекратите отправлять обновления всем, кто его использует. Ваш локальный экземпляр останется без изменений."
|
||||
"message": "Удаляет сборку с серверов Modrinth и прекращает отправку обновлений. Локальная копия сборки останется нетронутой."
|
||||
},
|
||||
"installation-settings.shared-instance.unpublishing-button": {
|
||||
"message": "Снятие с публикации..."
|
||||
"message": "Закрытие доступа..."
|
||||
},
|
||||
"installation-settings.unlink-shared-instance.modal.admonition-body": {
|
||||
"message": "Это повлияет только на ваш локальный экземпляр. Установленный контент останется на этом устройстве, и это никак не отразится на общем экземпляре и других пользователях."
|
||||
@@ -1368,13 +1362,13 @@
|
||||
"message": "Отвязка сборки"
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.admonition-body": {
|
||||
"message": "Это удалит общий экземпляр с серверов Modrinth. Пользователи, использующие его в приложении Modrinth, перестанут получать обновления, но ваш локальный экземпляр и его содержимое останутся на этом устройстве."
|
||||
"message": "Сборка будет удалена с серверов Modrinth. Локальная копия и её контент останутся на устройстве, а другие участники перестанут получать обновления."
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.admonition-header": {
|
||||
"message": "Отмена публикации общего экземпляра"
|
||||
"message": "Закрытие доступа к сборке"
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.header": {
|
||||
"message": "Отменить публикацию общего экземпляра"
|
||||
"message": "Закрытие доступа к сборке"
|
||||
},
|
||||
"instance.action.create-shortcut": {
|
||||
"message": "Создать ярлык"
|
||||
@@ -1610,6 +1604,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": "Обёртка"
|
||||
},
|
||||
|
||||
@@ -218,6 +218,9 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Serveri za autentifikaciju su nedostupni"
|
||||
},
|
||||
"app.behavior-settings.confirmations.title": {
|
||||
"message": "Potvrde"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "Dodavanje servera na instancu"
|
||||
},
|
||||
|
||||
@@ -62,6 +62,12 @@
|
||||
"app.action-bar.install.summary.invalid-modpack-files": {
|
||||
"message": "Modpaketets filer har ogiltig metadata"
|
||||
},
|
||||
"app.action-bar.install.summary.java-setup-failed": {
|
||||
"message": "Java-installationen kunde inte avslutas"
|
||||
},
|
||||
"app.action-bar.install.summary.loader-setup-failed": {
|
||||
"message": "Konfigurering av loader misslyckades"
|
||||
},
|
||||
"app.action-bar.install.summary.local-data-error": {
|
||||
"message": "Kunde inte uppdatera lokal data"
|
||||
},
|
||||
@@ -173,6 +179,9 @@
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Visa speltid"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Hoppa över bekräftelser till lågriskåtgärder som att duplicera installationer, vanlig innehålls radering, bulk uppdateringar, avlänkning och reparationer. Varningar för farligare åtgärder visas alltid."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Hoppa över icke nödvändiga varningar"
|
||||
},
|
||||
@@ -195,7 +204,7 @@
|
||||
"message": "Kan ej nå autentiseringsservrarna"
|
||||
},
|
||||
"app.behavior-settings.confirmations.title": {
|
||||
"message": "Bekräftningar"
|
||||
"message": "Bekräftelser"
|
||||
},
|
||||
"app.behavior-settings.content.title": {
|
||||
"message": "Hem och innehåll"
|
||||
@@ -228,7 +237,7 @@
|
||||
"message": "Utforska {projectType}"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Upptäck servrar"
|
||||
"message": "Utforska servrar"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Göm redan tillagda servrar"
|
||||
@@ -674,15 +683,6 @@
|
||||
"app.modal.install-to-play.report-reason": {
|
||||
"message": "Vilken regel bryter instansen mot?"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.inappropriate": {
|
||||
"message": "Olämplig"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.malicious": {
|
||||
"message": "Skadlig"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.spam": {
|
||||
"message": "Spam"
|
||||
},
|
||||
"app.modal.install-to-play.report-shared-instance-header": {
|
||||
"message": "Rapportera delad instans"
|
||||
},
|
||||
@@ -821,6 +821,9 @@
|
||||
"app.settings.default-instance-options.java-arguments.title": {
|
||||
"message": "Java-argument"
|
||||
},
|
||||
"app.settings.default-instance-options.memory-allocation.title": {
|
||||
"message": "Minnestilldelning"
|
||||
},
|
||||
"app.settings.default-instance-options.post-exit-hook.description": {
|
||||
"message": "Körs efter att spelet stängs."
|
||||
},
|
||||
@@ -828,7 +831,7 @@
|
||||
"message": "Körs innan instansen startar."
|
||||
},
|
||||
"app.settings.default-instance-options.pre-launch-hook.placeholder": {
|
||||
"message": "Ange för-starts kommando..."
|
||||
"message": "Ange för-startskommando..."
|
||||
},
|
||||
"app.settings.default-instance-options.width.placeholder": {
|
||||
"message": "Ange bredd..."
|
||||
@@ -881,6 +884,9 @@
|
||||
"app.settings.tabs.behavior": {
|
||||
"message": "Beteende"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Standard spelinställningar"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Java-installationer"
|
||||
},
|
||||
@@ -1094,6 +1100,9 @@
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "Version {version} har installerats!"
|
||||
},
|
||||
"app.user.project.install-to-instance": {
|
||||
"message": "Installera till instans"
|
||||
},
|
||||
"app.world.server-modal.placeholder-address": {
|
||||
"message": "exempel.modrinth.gg"
|
||||
},
|
||||
@@ -1217,6 +1226,12 @@
|
||||
"installation-settings.shared-instance.unpublishing-button": {
|
||||
"message": "Avpublicerar..."
|
||||
},
|
||||
"installation-settings.unlink-shared-instance.modal.admonition-header": {
|
||||
"message": "Avlänkar delad instans"
|
||||
},
|
||||
"installation-settings.unlink-shared-instance.modal.header": {
|
||||
"message": "Avlänka delad instans"
|
||||
},
|
||||
"installation-settings.unpublish-shared-instance.modal.admonition-body": {
|
||||
"message": "Detta raderar den delade instansen från Modrinths servrar. De som använder den i Modrinth App kommer sluta få uppdateringar, men din lokala instans och dess innehåll är kvar på den här enheten."
|
||||
},
|
||||
@@ -1316,9 +1331,15 @@
|
||||
"instance.server-modal.resource-pack": {
|
||||
"message": "Resurs pack"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.actions": {
|
||||
"message": "Åtgärder"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.code": {
|
||||
"message": "Inbjudningslänk"
|
||||
},
|
||||
"instance.settings.sharing.active-invites.empty": {
|
||||
"message": "Det finns inga aktiva inbjudningar."
|
||||
},
|
||||
"instance.settings.sharing.active-invites.expires": {
|
||||
"message": "Går ut"
|
||||
},
|
||||
@@ -1334,6 +1355,12 @@
|
||||
"instance.settings.sharing.active-invites.uses": {
|
||||
"message": "Användningar"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-body": {
|
||||
"message": "Inbjudningslänken <monospace>{code}</monospace> kommer sluta fungera omedelbart. De som redan gått med kommer ha kvar åtkomst."
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.admonition-header": {
|
||||
"message": "Den här åtgärden kan inte ångras"
|
||||
},
|
||||
"instance.settings.sharing.revoke-invite.confirm": {
|
||||
"message": "Återkalla inbjudan"
|
||||
},
|
||||
@@ -1448,6 +1475,12 @@
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Hooks för spelstart"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-id.description": {
|
||||
"message": "$INST_ID: Instansmappens namn"
|
||||
},
|
||||
"instance.settings.tabs.hooks.variables.inst-name.description": {
|
||||
"message": "$INST_NAME: Instansnamnet"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper": {
|
||||
"message": "Omslag"
|
||||
},
|
||||
|
||||
@@ -173,6 +173,9 @@
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "İsim etiketini gizle"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "Ana sayfadaki “Tekrar oyuna katıl” bölümünde son oynanan dünyaları göster."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Dünyalara hızlıca geri dön"
|
||||
},
|
||||
@@ -188,9 +191,15 @@
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Sistem pencere çerçevesi"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Her bir örneği ne kadar süreyle oynadığını göster."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Oynama süresini göster"
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.description": {
|
||||
"message": "Yinelenen yüklemeler, normal içerik silme, toplu güncellemeler, bağlantıların kaldırılması ve onarımlar gibi düşük riskli işlemlerde onay adımlarını atlayın. Tehlikeli işlemlerle ilgili uyarılar her zaman gösterilir."
|
||||
},
|
||||
"app.appearance-settings.skip-non-essential-warnings.title": {
|
||||
"message": "Gerekli olmayan uyarıları atla"
|
||||
},
|
||||
@@ -215,6 +224,12 @@
|
||||
"app.behavior-settings.confirmations.title": {
|
||||
"message": "Onaylamalar"
|
||||
},
|
||||
"app.behavior-settings.content.title": {
|
||||
"message": "Ana sayfa ve içerik"
|
||||
},
|
||||
"app.behavior-settings.startup-and-navigation.title": {
|
||||
"message": "Başlatma ve gezinme"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "Sunucuyu kuruluma ekle"
|
||||
},
|
||||
@@ -245,6 +260,9 @@
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Zaten eklenmiş sunucuları gizle"
|
||||
},
|
||||
"app.browse.hide-installed-modpacks": {
|
||||
"message": "Zaten yüklenmiş olanları gizle"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Mod paketleri"
|
||||
},
|
||||
@@ -473,6 +491,9 @@
|
||||
"app.instance.share.remove-user-modal.effect-invite-again": {
|
||||
"message": "Onları sonradan tekrar davet edebilirsiniz"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effect-last-user": {
|
||||
"message": "Bu son kullanıcıdır; bu örnek için paylaşım özelliği devre dışı bırakılacaktır"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.effects-label": {
|
||||
"message": "Ne olur?"
|
||||
},
|
||||
@@ -485,12 +506,18 @@
|
||||
"app.instance.share.remove-user-modal.user-avatar-alt": {
|
||||
"message": "{username} nın avatarı"
|
||||
},
|
||||
"app.instance.share.remove-user-modal.warning-body": {
|
||||
"message": "{username}'nın bu paylaşılan örneğe erişimini iptal ederseniz, bu kişinin güncellemeleri alabilmesi için onu yeniden davet etmeniz gerekecektir."
|
||||
},
|
||||
"app.instance.share.sign-in.button": {
|
||||
"message": "Giriş yap"
|
||||
},
|
||||
"app.instance.share.unable-to-connect.heading": {
|
||||
"message": "Bağlanılamıyor"
|
||||
},
|
||||
"app.instance.share.unlink.body": {
|
||||
"message": "Örneğini paylaşmak için bu mod paketinin bağlantısını kaldırmalısın"
|
||||
},
|
||||
"app.instance.shared-instance-already-installed.install-anyway": {
|
||||
"message": "Yine de kur"
|
||||
},
|
||||
@@ -638,15 +665,6 @@
|
||||
"app.modal.install-to-play.report-image-too-large": {
|
||||
"message": "Dosya 1 MiB boyut sınırını aşıyor"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.inappropriate": {
|
||||
"message": "Uygunsuz"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.malicious": {
|
||||
"message": "Kötü niyetli"
|
||||
},
|
||||
"app.modal.install-to-play.report-reason.spam": {
|
||||
"message": "Spam"
|
||||
},
|
||||
"app.modal.install-to-play.report-submitted": {
|
||||
"message": "Rapor sunuldu"
|
||||
},
|
||||
|
||||
@@ -590,6 +590,9 @@
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "Сервера або світи не додано"
|
||||
},
|
||||
"app.instance.worlds.refreshing": {
|
||||
"message": "Перезавантаження…"
|
||||
},
|
||||
"app.instance.worlds.remove-server-modal.remove-button": {
|
||||
"message": "Видалити сервер"
|
||||
},
|
||||
@@ -701,15 +704,6 @@
|
||||
"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": "Скарга на спільний профіль"
|
||||
},
|
||||
@@ -729,10 +723,10 @@
|
||||
"message": "Уміст спільного профілю"
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance-unknown-files-description": {
|
||||
"message": "Цей спільний профіль містить файли, які не є опубліковані на Modrinth. Ми наполегливо рекомендуємо встановлювати лише ті файли, яким довіряєте."
|
||||
"message": "Цей спільний профіль містить файли, які не викладені на Modrinth. Наполегливо радимо встановлювати вміст лише з тих джерел, яким ви довіряєте."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-description": {
|
||||
"message": "Ця збірка сервера містить файли, які не є опубліковані на Modrinth. Ми наполегливо рекомендуємо встановлювати лише ті файли, яким довіряєте."
|
||||
"message": "Ця збірка сервера містить файли, які не викладені на Modrinth. Наполегливо радимо встановлювати вміст лише з тих джерел, яким ви довіряєте."
|
||||
},
|
||||
"app.modal.install-to-play.unknown-files-warning": {
|
||||
"message": "Попередження про невідомі файли"
|
||||
@@ -1226,6 +1220,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"
|
||||
},
|
||||
@@ -1619,6 +1616,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": "Обгортач"
|
||||
},
|
||||
|
||||
@@ -183,7 +183,7 @@
|
||||
"message": "当 Minecraft 进程启动时,将 Modrinth App 最小化。"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "最小化启动器"
|
||||
"message": "最小化 App"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "使用操作系统的标题栏和窗口控件。需要重启应用。"
|
||||
@@ -363,7 +363,7 @@
|
||||
"message": "推送更新"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.publishing-button": {
|
||||
"message": "正在推送…"
|
||||
"message": "正在推送……"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.removed-label": {
|
||||
"message": "移除内容"
|
||||
@@ -381,7 +381,7 @@
|
||||
"message": "查看更新"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.reviewing-button": {
|
||||
"message": "正在审查…"
|
||||
"message": "正在审查……"
|
||||
},
|
||||
"app.instance.admonitions.shared-instance.update-available-body": {
|
||||
"message": "{name}需要更新。请更新到最新版本以启动游戏。"
|
||||
@@ -704,15 +704,6 @@
|
||||
"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": "举报共享实例"
|
||||
},
|
||||
@@ -1229,6 +1220,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"
|
||||
},
|
||||
@@ -1622,6 +1616,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": "包装器命令"
|
||||
},
|
||||
|
||||
@@ -704,15 +704,6 @@
|
||||
"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": "檢舉共用實例"
|
||||
},
|
||||
@@ -1089,7 +1080,7 @@
|
||||
"message": "無"
|
||||
},
|
||||
"app.skins.modal.replace-texture-button": {
|
||||
"message": "取代材質"
|
||||
"message": "取代紋理"
|
||||
},
|
||||
"app.skins.modal.save-skin-button": {
|
||||
"message": "儲存外觀"
|
||||
@@ -1098,7 +1089,7 @@
|
||||
"message": "正在儲存..."
|
||||
},
|
||||
"app.skins.modal.texture-section": {
|
||||
"message": "材質"
|
||||
"message": "紋理"
|
||||
},
|
||||
"app.skins.modal.upload-skin-first-tooltip": {
|
||||
"message": "請先上傳外觀檔案!"
|
||||
@@ -1229,6 +1220,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"
|
||||
},
|
||||
@@ -1622,6 +1616,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": "包裝指令"
|
||||
},
|
||||
|
||||
@@ -1242,11 +1242,25 @@ const advancedFiltersCollapsed = computed({
|
||||
},
|
||||
})
|
||||
|
||||
const dismissedPhotosensitivityFilterWarning = computed({
|
||||
get: () => themeStore.getFeatureFlag('dismissed_photosensitivity_filter_warning'),
|
||||
set: (value) => {
|
||||
themeStore.featureFlags['dismissed_photosensitivity_filter_warning'] = value
|
||||
getSettings()
|
||||
.then((settings) => {
|
||||
settings.feature_flags['dismissed_photosensitivity_filter_warning'] = value
|
||||
return setSettings(settings)
|
||||
})
|
||||
.catch(handleError)
|
||||
},
|
||||
})
|
||||
|
||||
provideBrowseManager({
|
||||
tags,
|
||||
projectType,
|
||||
...searchState,
|
||||
advancedFiltersCollapsed,
|
||||
dismissedPhotosensitivityFilterWarning,
|
||||
getProjectLink: (result: Labrinth.Search.v3.ResultSearchProject) => ({
|
||||
path: `/project/${result.project_id ?? result.slug}`,
|
||||
query: getProjectBrowseQuery(),
|
||||
|
||||
@@ -1385,14 +1385,14 @@ provideContentManager({
|
||||
project: linkedModpackProject.value,
|
||||
projectLink: {
|
||||
path: `/project/${linkedModpackProject.value.slug ?? linkedModpackProject.value.id}`,
|
||||
query: { i: instance.value.id },
|
||||
query: { i: instancePage.instanceId.value },
|
||||
},
|
||||
version: linkedModpackVersion.value ?? undefined,
|
||||
versionLink:
|
||||
linkedModpackProject.value && linkedModpackVersion.value
|
||||
? {
|
||||
path: `/project/${linkedModpackProject.value.slug ?? linkedModpackProject.value.id}/version/${linkedModpackVersion.value.id}`,
|
||||
query: { i: instance.value.id },
|
||||
query: { i: instancePage.instanceId.value },
|
||||
}
|
||||
: undefined,
|
||||
owner: linkedModpackOwner.value
|
||||
@@ -1479,7 +1479,7 @@ provideContentManager({
|
||||
icon_url: null,
|
||||
},
|
||||
projectLink: item.project?.id
|
||||
? { path: `/project/${item.project.id}`, query: { i: instance.value.id } }
|
||||
? { path: `/project/${item.project.id}`, query: { i: instancePage.instanceId.value } }
|
||||
: undefined,
|
||||
version: item.version ?? {
|
||||
id: item.file_name,
|
||||
@@ -1490,7 +1490,7 @@ provideContentManager({
|
||||
item.project?.id && item.version?.id
|
||||
? {
|
||||
path: `/project/${item.project.id}/version/${item.version.id}`,
|
||||
query: { i: instance.value.id },
|
||||
query: { i: instancePage.instanceId.value },
|
||||
}
|
||||
: undefined,
|
||||
owner: item.owner
|
||||
|
||||
@@ -142,7 +142,7 @@ import {
|
||||
isSharedInstanceUnavailableError,
|
||||
type SharedInstanceUnavailableReason,
|
||||
} from '@/helpers/install'
|
||||
import { get_full_path, kill, remove, run } from '@/helpers/instance'
|
||||
import { get_full_path, kill, refresh_content_updates, remove, run } from '@/helpers/instance'
|
||||
import { useSharedInstanceErrors } from '@/helpers/shared-instance-errors'
|
||||
import type { GameInstance } from '@/helpers/types'
|
||||
import { createInstanceShortcut, showInstanceInFolder } from '@/helpers/utils.js'
|
||||
@@ -180,7 +180,7 @@ const showInstancePlayTime = computed(() => themeStore.getFeatureFlag('show_inst
|
||||
|
||||
const online = useOnline()
|
||||
const offline = computed(() => !online.value)
|
||||
const instanceId = computed(() => String(route.params.id ?? ''))
|
||||
const instanceId = ref(String(route.params.id ?? ''))
|
||||
const instanceQuery = useQuery(
|
||||
computed(() => ({
|
||||
...instanceDetailQueryOptions(instanceId.value),
|
||||
@@ -194,6 +194,23 @@ useQuery(
|
||||
})),
|
||||
)
|
||||
const instance = computed(() => instanceQuery.data.value)
|
||||
useQuery(
|
||||
computed(() => ({
|
||||
queryKey: instanceKeys.contentUpdateCheck(instanceId.value),
|
||||
queryFn: async () => {
|
||||
const targetInstanceId = instanceId.value
|
||||
await refresh_content_updates(targetInstanceId)
|
||||
await queryClient.invalidateQueries({
|
||||
queryKey: instanceKeys.content(targetInstanceId),
|
||||
})
|
||||
return targetInstanceId
|
||||
},
|
||||
enabled: !!instanceId.value && !offline.value && instance.value?.install_stage === 'installed',
|
||||
staleTime: 10 * 60_000,
|
||||
gcTime: 30 * 60_000,
|
||||
retry: false,
|
||||
})),
|
||||
)
|
||||
const linkedProjectId = computed(() => instance.value?.link?.project_id ?? '')
|
||||
const linkedProjectQuery = useQuery(
|
||||
computed(() => ({
|
||||
@@ -242,6 +259,7 @@ onBeforeRouteUpdate(async (to, from) => {
|
||||
|
||||
try {
|
||||
await ensureCriticalInstanceData(targetInstanceId)
|
||||
instanceId.value = targetInstanceId
|
||||
} catch (error) {
|
||||
if (isUnmanagedInstanceError(error)) return { path: '/' }
|
||||
handleError(error)
|
||||
|
||||
@@ -11,6 +11,8 @@ export const instanceKeys = {
|
||||
detail: (instanceId: string) => [...instanceKeys.all, 'summary', instanceId] as const,
|
||||
processes: (instanceId: string) => [...instanceKeys.all, 'processes', instanceId] as const,
|
||||
content: (instanceId: string) => [...instanceKeys.all, 'content', instanceId] as const,
|
||||
contentUpdateCheck: (instanceId: string) =>
|
||||
[...instanceKeys.all, 'content-update-check', instanceId] as const,
|
||||
rootPath: (instanceId: string) => [...instanceKeys.detail(instanceId), 'root-path'] as const,
|
||||
files: (instanceId: string, path: string) =>
|
||||
[...instanceKeys.detail(instanceId), 'files', path] as const,
|
||||
|
||||
@@ -14,8 +14,13 @@
|
||||
:members="members"
|
||||
:dependency-link-creator="createDependencyLink"
|
||||
>
|
||||
<template #headerActions>
|
||||
<template #headerActions="{ primaryFile }">
|
||||
<Button
|
||||
v-tooltip="
|
||||
primaryFile?.url
|
||||
? primaryFile.filename + ' (' + formatBytes(primaryFile.size) + ')'
|
||||
: undefined
|
||||
"
|
||||
type="colored"
|
||||
color="brand"
|
||||
:disabled="installing || (installed && installedVersion === version.id)"
|
||||
@@ -92,6 +97,7 @@ import {
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
type DependencyContext,
|
||||
useFormatBytes,
|
||||
useVIntl,
|
||||
VersionPage,
|
||||
} from '@modrinth/ui'
|
||||
@@ -103,6 +109,7 @@ import { get_project_many, get_version_many } from '@/helpers/cache.js'
|
||||
import { useBreadcrumb } from '@/providers/breadcrumbs'
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
const formatBytes = useFormatBytes()
|
||||
|
||||
const messages = defineMessages({
|
||||
allVersions: {
|
||||
|
||||
@@ -22,6 +22,7 @@ export const DEFAULT_FEATURE_FLAGS = {
|
||||
friends_online_collapsed: false,
|
||||
friends_offline_collapsed: true,
|
||||
friends_pending_collapsed: true,
|
||||
dismissed_photosensitivity_filter_warning: false,
|
||||
}
|
||||
|
||||
export const THEME_OPTIONS = ['dark', 'light', 'oled', 'retro', 'system'] as const
|
||||
|
||||
@@ -200,6 +200,7 @@ fn main() {
|
||||
"instance_get_install_candidates",
|
||||
"instance_content",
|
||||
"instance_get_content_items",
|
||||
"instance_refresh_content_updates",
|
||||
"instance_get_dependencies_as_content_items",
|
||||
"instance_get_linked_modpack_info",
|
||||
"instance_get_linked_modpack_content",
|
||||
|
||||
@@ -30,6 +30,7 @@ pub fn init<R: tauri::Runtime>() -> tauri::plugin::TauriPlugin<R> {
|
||||
instance_get_install_candidates,
|
||||
instance_content,
|
||||
instance_get_content_items,
|
||||
instance_refresh_content_updates,
|
||||
instance_get_dependencies_as_content_items,
|
||||
instance_get_linked_modpack_info,
|
||||
instance_get_linked_modpack_content,
|
||||
@@ -524,6 +525,11 @@ pub async fn instance_get_content_items(
|
||||
)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn instance_refresh_content_updates(instance_id: &str) -> Result<()> {
|
||||
Ok(theseus::instance::refresh_content_updates(instance_id).await?)
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn instance_get_dependencies_as_content_items(
|
||||
dependencies: Vec<Dependency>,
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
CLAUDE.md
|
||||
@@ -0,0 +1,42 @@
|
||||
# apps/frontend — Modrinth Website
|
||||
|
||||
Nuxt 3 application serving the main Modrinth website. Uses Vue 3, Tailwind CSS v3, and file-based routing.
|
||||
|
||||
## Architecture
|
||||
|
||||
Nuxt 3 with SSR — pages are server-rendered and hydrated on the client. Uses `$fetch` for server-side data fetching and `@modrinth/api-client` (via `NuxtModrinthClient`) for client-side API calls.
|
||||
|
||||
## Key Directories
|
||||
|
||||
- **`src/pages/`** — file-based routing (`[param].vue` for dynamic segments, nested folders for nested routes)
|
||||
- **`src/components/`** — website-specific components (not shared with the app)
|
||||
- **`src/composables/`** — Vue composables, including `queries/` for TanStack Query options
|
||||
- **`src/providers/`** — page-level DI context providers (e.g., version modal, project page)
|
||||
- **`src/plugins/`** — Nuxt plugins (TanStack Query setup, theme, etc.)
|
||||
- **`src/middleware/`** — route guards and auth checks
|
||||
- **`src/layouts/`** — Nuxt layout components
|
||||
- **`src/server/`** — server-side plugins, routes, and utilities
|
||||
- **`src/store/`** — Pinia state management
|
||||
- **`src/helpers/`** — utility functions
|
||||
- **`src/locales/`** — i18n translation files
|
||||
|
||||
## Components
|
||||
|
||||
**Website-specific components go in `src/components/`.** These are components that only make sense in the website context — admin panels, moderation tools, dashboard widgets, brand components, etc.
|
||||
|
||||
**Shared components go in `packages/ui`.** If a component could be used by both the website and the desktop app, it belongs in `packages/ui/src/components/`. See `packages/ui/AGENTS.md` for UI standards, color rules, and component patterns.
|
||||
|
||||
Rule of thumb: if it doesn't depend on Nuxt-specific APIs or website-only features, it should be in `packages/ui`.
|
||||
|
||||
## Data Fetching
|
||||
|
||||
Use `@modrinth/api-client` via `injectModrinthClient()` for all API calls. See `packages/api-client/AGENTS.md` for the full API client documentation.
|
||||
|
||||
For caching and server state, use TanStack Query (`@tanstack/vue-query`). See the `tanstack-query` skill (`.agents/skills/tanstack-query/SKILL.md`) for patterns and conventions used in this codebase.
|
||||
|
||||
### Deprecated Composables
|
||||
|
||||
These composables are deprecated and should not be used in new code:
|
||||
|
||||
- **`useAsyncData`** - we use tanstack, not nuxt's built in async data utility.
|
||||
- **`useBaseFetch`** (`src/composables/fetch.js`) — legacy Labrinth fetch wrapper. Use `client.labrinth.*` modules instead.
|
||||
@@ -1,42 +0,0 @@
|
||||
# apps/frontend — Modrinth Website
|
||||
|
||||
Nuxt 3 application serving the main Modrinth website. Uses Vue 3, Tailwind CSS v3, and file-based routing.
|
||||
|
||||
## Architecture
|
||||
|
||||
Nuxt 3 with SSR — pages are server-rendered and hydrated on the client. Uses `$fetch` for server-side data fetching and `@modrinth/api-client` (via `NuxtModrinthClient`) for client-side API calls.
|
||||
|
||||
## Key Directories
|
||||
|
||||
- **`src/pages/`** — file-based routing (`[param].vue` for dynamic segments, nested folders for nested routes)
|
||||
- **`src/components/`** — website-specific components (not shared with the app)
|
||||
- **`src/composables/`** — Vue composables, including `queries/` for TanStack Query options
|
||||
- **`src/providers/`** — page-level DI context providers (e.g., version modal, project page)
|
||||
- **`src/plugins/`** — Nuxt plugins (TanStack Query setup, theme, etc.)
|
||||
- **`src/middleware/`** — route guards and auth checks
|
||||
- **`src/layouts/`** — Nuxt layout components
|
||||
- **`src/server/`** — server-side plugins, routes, and utilities
|
||||
- **`src/store/`** — Pinia state management
|
||||
- **`src/helpers/`** — utility functions
|
||||
- **`src/locales/`** — i18n translation files
|
||||
|
||||
## Components
|
||||
|
||||
**Website-specific components go in `src/components/`.** These are components that only make sense in the website context — admin panels, moderation tools, dashboard widgets, brand components, etc.
|
||||
|
||||
**Shared components go in `packages/ui`.** If a component could be used by both the website and the desktop app, it belongs in `packages/ui/src/components/`. See `packages/ui/CLAUDE.md` for UI standards, color rules, and component patterns.
|
||||
|
||||
Rule of thumb: if it doesn't depend on Nuxt-specific APIs or website-only features, it should be in `packages/ui`.
|
||||
|
||||
## Data Fetching
|
||||
|
||||
Use `@modrinth/api-client` via `injectModrinthClient()` for all API calls. See `packages/api-client/CLAUDE.md` for the full API client documentation.
|
||||
|
||||
For caching and server state, use TanStack Query (`@tanstack/vue-query`). See the `tanstack-query` skill (`.claude/skills/tanstack-query/SKILL.md`) for patterns and conventions used in this codebase.
|
||||
|
||||
### Deprecated Composables
|
||||
|
||||
These composables are deprecated and should not be used in new code:
|
||||
|
||||
- **`useAsyncData`** - we use tanstack, not nuxt's built in async data utility.
|
||||
- **`useBaseFetch`** (`src/composables/fetch.js`) — legacy Labrinth fetch wrapper. Use `client.labrinth.*` modules instead.
|
||||
@@ -38,6 +38,7 @@
|
||||
"wrangler": "^4.115.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@contentauth/c2pa-web": "^0.13.1",
|
||||
"@formatjs/intl-localematcher": "^0.5.4",
|
||||
"@ltd/j-toml": "^1.38.0",
|
||||
"@modrinth/api-client": "workspace:*",
|
||||
|
||||
@@ -40,6 +40,8 @@ html {
|
||||
|
||||
interpolate-size: allow-keywords;
|
||||
scrollbar-gutter: stable;
|
||||
|
||||
--ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
|
||||
}
|
||||
|
||||
.light-mode {
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
<template>
|
||||
<NewModal
|
||||
ref="modal"
|
||||
:header="formatMessage(messages.title)"
|
||||
:closable="false"
|
||||
fade="warning"
|
||||
max-width="544px"
|
||||
>
|
||||
<div class="flex flex-col">
|
||||
<p class="mb-4 mt-0 leading-normal">
|
||||
{{ formatMessage(messages.body1) }}
|
||||
</p>
|
||||
<p class="mb-4 mt-0 leading-normal">
|
||||
<IntlFormatted :message-id="messages.body2">
|
||||
<template #rules="{ children }">
|
||||
<nuxt-link
|
||||
to="/legal/rules#generative-ai"
|
||||
target="_blank"
|
||||
class="font-semibold text-orange hover:underline"
|
||||
>
|
||||
<component :is="() => normalizeChildren(children)" />
|
||||
</nuxt-link>
|
||||
</template>
|
||||
</IntlFormatted>
|
||||
</p>
|
||||
<div class="flex justify-end">
|
||||
<Button type="colored" color="brand" native-type="button" @click="hide">
|
||||
<CheckCircleIcon class="size-4" />
|
||||
{{ formatMessage(commonMessages.iUnderstandButton) }}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
</NewModal>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { CheckCircleIcon } from '@modrinth/assets'
|
||||
import {
|
||||
Button,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
IntlFormatted,
|
||||
NewModal,
|
||||
normalizeChildren,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { useTemplateRef } from 'vue'
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
const modal = useTemplateRef('modal')
|
||||
|
||||
const messages = defineMessages({
|
||||
title: {
|
||||
id: 'project.ai-image-warning-modal.title',
|
||||
defaultMessage: 'AI-generated images not allowed',
|
||||
},
|
||||
body1: {
|
||||
id: 'project.ai-image-warning-modal.body.1',
|
||||
defaultMessage:
|
||||
'Using AI-generated images to represent your project is not allowed. Attempting to work around detection may lead to your Modrinth account being suspended.',
|
||||
},
|
||||
body2: {
|
||||
id: 'project.ai-image-warning-modal.body.2',
|
||||
defaultMessage: `See section 6 of <rules>Modrinth's Content Rules</rules> for more information on our generative AI policy.`,
|
||||
},
|
||||
})
|
||||
|
||||
function show() {
|
||||
modal.value?.show()
|
||||
}
|
||||
|
||||
function hide() {
|
||||
modal.value?.hide()
|
||||
}
|
||||
|
||||
defineExpose({ show, hide })
|
||||
</script>
|
||||
@@ -278,11 +278,13 @@ import {
|
||||
CollapsibleRegion,
|
||||
type ContentItem,
|
||||
CopyCode,
|
||||
formatReportType,
|
||||
getProjectTypeIcon,
|
||||
injectModrinthClient,
|
||||
injectNotificationManager,
|
||||
useFormatDateTime,
|
||||
useRelativeTime,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { formatProjectType } from '@modrinth/utils'
|
||||
import { computed, ref, watch } from 'vue'
|
||||
@@ -297,6 +299,7 @@ import SharedInstanceReportContext, {
|
||||
} from './SharedInstanceReportContext.vue'
|
||||
|
||||
const { addNotification } = injectNotificationManager()
|
||||
const { formatMessage } = useVIntl()
|
||||
const client = injectModrinthClient()
|
||||
const auth = await useAuth()
|
||||
|
||||
@@ -787,13 +790,9 @@ const reportItemUrl = computed(() => {
|
||||
}
|
||||
})
|
||||
|
||||
const formattedReportType = computed(() => {
|
||||
const reportType = props.report.report_type
|
||||
|
||||
// some are split by -, some are split by " "
|
||||
const words = reportType.includes('-') ? reportType.split('-') : reportType.split(' ')
|
||||
return words.map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(' ')
|
||||
})
|
||||
const formattedReportType = computed(() =>
|
||||
formatReportType(formatMessage, props.report.report_type),
|
||||
)
|
||||
|
||||
function copyId() {
|
||||
navigator.clipboard.writeText(props.report.id).then(() => {
|
||||
|
||||
+83
@@ -0,0 +1,83 @@
|
||||
<script setup lang="ts">
|
||||
import { MegaphoneIcon } from '@modrinth/assets'
|
||||
import {
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
IntlFormatted,
|
||||
normalizeChildren,
|
||||
SettingsFormGroup,
|
||||
SettingsToggleCard,
|
||||
StyledInput,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
|
||||
import type { NoteDisclosure } from './types'
|
||||
|
||||
const model = defineModel<NoteDisclosure>({ required: true })
|
||||
|
||||
defineProps<{
|
||||
disabled?: boolean
|
||||
}>()
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const messages = defineMessages({
|
||||
title: {
|
||||
id: 'project.settings.disclosures.advertising.title',
|
||||
defaultMessage: 'Contains advertisements',
|
||||
},
|
||||
description1: {
|
||||
id: 'project.settings.disclosures.advertising.description.1',
|
||||
defaultMessage: `You must enable this if your project contains advertisements, sponsorships, or promotions of other works.`,
|
||||
},
|
||||
description2: {
|
||||
id: 'project.settings.disclosures.advertising.description.2',
|
||||
defaultMessage: `If the promotion has no direct monetary value <emphasis>and</emphasis> it is for something that the average person would consider <italic>relevant</italic> and <italic>unobtrusive</italic> (such as a link to your Modrinth profile in the corner of the settings page for your own mod), we would not consider that an advertisement.`,
|
||||
},
|
||||
notePlaceholder: {
|
||||
id: 'project.settings.disclosures.advertising.note-placeholder',
|
||||
defaultMessage: 'e.g. Adds the Modrinth SMP server to your server list automatically.',
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<SettingsToggleCard
|
||||
v-model="model.enabled"
|
||||
:disabled="disabled"
|
||||
:icon="MegaphoneIcon"
|
||||
:title="formatMessage(messages.title)"
|
||||
>
|
||||
<p>{{ formatMessage(messages.description1) }}</p>
|
||||
<p>
|
||||
<IntlFormatted :message-id="messages.description2">
|
||||
<template #italic="{ children }">
|
||||
<span class="italic">
|
||||
<component :is="() => normalizeChildren(children)" />
|
||||
</span>
|
||||
</template>
|
||||
<template #emphasis="{ children }">
|
||||
<span class="font-bold italic">
|
||||
<component :is="() => normalizeChildren(children)" />
|
||||
</span>
|
||||
</template>
|
||||
</IntlFormatted>
|
||||
</p>
|
||||
<template #expanded>
|
||||
<SettingsFormGroup
|
||||
:title="formatMessage(commonMessages.explanationLabel)"
|
||||
title-for="advertising-disclosure-note"
|
||||
>
|
||||
<StyledInput
|
||||
id="advertising-disclosure-note"
|
||||
v-model="model.note"
|
||||
multiline
|
||||
:rows="3"
|
||||
class="max-w-[40rem]"
|
||||
:disabled="disabled"
|
||||
:placeholder="formatMessage(messages.notePlaceholder)"
|
||||
/>
|
||||
</SettingsFormGroup>
|
||||
</template>
|
||||
</SettingsToggleCard>
|
||||
</template>
|
||||
@@ -0,0 +1,144 @@
|
||||
<script setup lang="ts">
|
||||
import { SparklesIcon } from '@modrinth/assets'
|
||||
import {
|
||||
Checkbox,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
IntlFormatted,
|
||||
normalizeChildren,
|
||||
SettingsFormGroup,
|
||||
SettingsToggleCard,
|
||||
StyledInput,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
|
||||
import type { AiDisclosure, AiUsage } from './types'
|
||||
|
||||
const model = defineModel<AiDisclosure>({ required: true })
|
||||
|
||||
defineProps<{
|
||||
disabled?: boolean
|
||||
}>()
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const AI_USES: AiUsage[] = ['code', 'assets', 'text', 'functionality']
|
||||
|
||||
const messages = defineMessages({
|
||||
title: {
|
||||
id: 'project.settings.disclosures.ai.title',
|
||||
defaultMessage: 'Contains AI-generated content',
|
||||
},
|
||||
description: {
|
||||
id: 'project.settings.disclosures.ai.description',
|
||||
defaultMessage: `You must enable this if this project contains a substantial amount of AI-generated code, any
|
||||
assets that are substantially AI-generated, the project's functionality relies on the use of
|
||||
generative AI, or if any element of your project's page such as description or publishing
|
||||
relies on generative AI.`,
|
||||
},
|
||||
contentRules: {
|
||||
id: 'project.settings.disclosures.ai.content-rules',
|
||||
defaultMessage:
|
||||
"Please refer to Section 6 of <rules>Modrinth's Content Rules</rules> for more information.",
|
||||
},
|
||||
typesDescription: {
|
||||
id: 'project.settings.disclosures.ai.types-description',
|
||||
defaultMessage: 'What is generative AI being used for?',
|
||||
},
|
||||
typeCode: {
|
||||
id: 'project.settings.disclosures.ai.types-code',
|
||||
defaultMessage: 'Code',
|
||||
},
|
||||
typeAssets: {
|
||||
id: 'project.settings.disclosures.ai.types-assets',
|
||||
defaultMessage: 'Assets',
|
||||
},
|
||||
typeText: {
|
||||
id: 'project.settings.disclosures.ai.types-text',
|
||||
defaultMessage: 'Text',
|
||||
},
|
||||
typeFunctionality: {
|
||||
id: 'project.settings.disclosures.ai.types-functionality',
|
||||
defaultMessage: 'Functionality',
|
||||
},
|
||||
notePlaceholder: {
|
||||
id: 'project.settings.disclosures.ai.note-placeholder',
|
||||
defaultMessage: 'e.g. The Chinese and Arabic translations are AI-generated.',
|
||||
},
|
||||
})
|
||||
|
||||
const useLabels = {
|
||||
code: messages.typeCode,
|
||||
assets: messages.typeAssets,
|
||||
text: messages.typeText,
|
||||
functionality: messages.typeFunctionality,
|
||||
} as const
|
||||
|
||||
function hasUse(use: AiUsage): boolean {
|
||||
return model.value.uses.includes(use)
|
||||
}
|
||||
|
||||
function setUse(use: AiUsage, enabled: boolean) {
|
||||
if (enabled) {
|
||||
if (!model.value.uses.includes(use)) {
|
||||
model.value.uses = [...model.value.uses, use]
|
||||
}
|
||||
return
|
||||
}
|
||||
model.value.uses = model.value.uses.filter((entry) => entry !== use)
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<SettingsToggleCard
|
||||
v-model="model.enabled"
|
||||
:disabled="disabled"
|
||||
:icon="SparklesIcon"
|
||||
:title="formatMessage(messages.title)"
|
||||
:description="formatMessage(messages.description)"
|
||||
>
|
||||
<p class="text-secondary">
|
||||
<IntlFormatted :message-id="messages.contentRules">
|
||||
<template #rules="{ children }">
|
||||
<nuxt-link
|
||||
to="/legal/rules#generative-ai"
|
||||
target="_blank"
|
||||
class="smart-clickable:allow-pointer-events underline hover:text-primary"
|
||||
>
|
||||
<component :is="() => normalizeChildren(children)" />
|
||||
</nuxt-link>
|
||||
</template>
|
||||
</IntlFormatted>
|
||||
</p>
|
||||
<template #expanded>
|
||||
<SettingsFormGroup :title="formatMessage(messages.typesDescription)">
|
||||
<div class="grid gap-2 sm:grid-cols-4">
|
||||
<Checkbox
|
||||
v-for="use in AI_USES"
|
||||
:key="use"
|
||||
:model-value="hasUse(use)"
|
||||
:disabled="disabled"
|
||||
@update:model-value="(enabled) => setUse(use, enabled)"
|
||||
>
|
||||
{{ formatMessage(useLabels[use]) }}
|
||||
</Checkbox>
|
||||
</div>
|
||||
</SettingsFormGroup>
|
||||
<SettingsFormGroup
|
||||
:title="formatMessage(commonMessages.explanationLabel)"
|
||||
title-for="ai-disclosure-note"
|
||||
optional
|
||||
>
|
||||
<StyledInput
|
||||
id="ai-disclosure-note"
|
||||
v-model="model.note"
|
||||
multiline
|
||||
:rows="3"
|
||||
class="max-w-[40rem]"
|
||||
:disabled="disabled"
|
||||
:placeholder="formatMessage(messages.notePlaceholder)"
|
||||
/>
|
||||
</SettingsFormGroup>
|
||||
</template>
|
||||
</SettingsToggleCard>
|
||||
</template>
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
<script setup lang="ts">
|
||||
import { ArchiveIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ArchivedProjectBanner,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
SettingsFormGroup,
|
||||
SettingsToggleCard,
|
||||
StyledInput,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
|
||||
import type { NoteDisclosure } from './types'
|
||||
|
||||
const model = defineModel<NoteDisclosure>({ required: true })
|
||||
|
||||
defineProps<{
|
||||
disabled?: boolean
|
||||
projectTitle: string
|
||||
}>()
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const messages = defineMessages({
|
||||
title: {
|
||||
id: 'project.settings.disclosures.archived.title',
|
||||
defaultMessage: 'Archive project',
|
||||
},
|
||||
description1: {
|
||||
id: 'project.settings.disclosures.archived.description.1',
|
||||
defaultMessage:
|
||||
'Mark your project as archived to let users know that you are no longer working on it.',
|
||||
},
|
||||
description2: {
|
||||
id: 'project.settings.disclosures.archived.description.2',
|
||||
defaultMessage:
|
||||
'Archived projects remain discoverable when their visibility is set to Public. If you wish to de-list your project, set its visibility to Unlisted.',
|
||||
},
|
||||
notePlaceholder: {
|
||||
id: 'project.settings.disclosures.archived.note-placeholder',
|
||||
defaultMessage: `e.g. I don't have time to maintain this project anymore, feel free to fork it!`,
|
||||
},
|
||||
bannerPreview: {
|
||||
id: 'project.settings.disclosures.archived.banner-preview',
|
||||
defaultMessage: 'Banner preview',
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<SettingsToggleCard
|
||||
v-model="model.enabled"
|
||||
:disabled="disabled"
|
||||
:icon="ArchiveIcon"
|
||||
:title="formatMessage(messages.title)"
|
||||
>
|
||||
<p>{{ formatMessage(messages.description1) }}</p>
|
||||
<p>{{ formatMessage(messages.description2) }}</p>
|
||||
<template #expanded>
|
||||
<SettingsFormGroup
|
||||
:title="formatMessage(commonMessages.explanationLabel)"
|
||||
title-for="archived-disclosure-note"
|
||||
optional
|
||||
>
|
||||
<StyledInput
|
||||
id="archived-disclosure-note"
|
||||
v-model="model.note"
|
||||
multiline
|
||||
:rows="3"
|
||||
class="max-w-[40rem]"
|
||||
:disabled="disabled"
|
||||
:placeholder="formatMessage(messages.notePlaceholder)"
|
||||
/>
|
||||
</SettingsFormGroup>
|
||||
<SettingsFormGroup :title="formatMessage(messages.bannerPreview)">
|
||||
<ArchivedProjectBanner :title="projectTitle" :reason="model.note" />
|
||||
</SettingsFormGroup>
|
||||
</template>
|
||||
</SettingsToggleCard>
|
||||
</template>
|
||||
+171
@@ -0,0 +1,171 @@
|
||||
<script setup lang="ts">
|
||||
import { GitForkIcon, PlusIcon, TrashIcon } from '@modrinth/assets'
|
||||
import {
|
||||
Button,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
SettingsFormGroup,
|
||||
SettingsToggleCard,
|
||||
StyledInput,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { watch } from 'vue'
|
||||
|
||||
import type { DerivativeDisclosure, DerivativeSource } from './types'
|
||||
|
||||
const model = defineModel<DerivativeDisclosure>({ required: true })
|
||||
|
||||
defineProps<{
|
||||
disabled?: boolean
|
||||
}>()
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const messages = defineMessages({
|
||||
title: {
|
||||
id: 'project.settings.disclosures.derivative.title',
|
||||
defaultMessage: 'Contains derivative content',
|
||||
},
|
||||
description: {
|
||||
id: 'project.settings.disclosures.derivative.description',
|
||||
defaultMessage:
|
||||
'You must enable this if your project is derivative of another project, such as being a fork or containing a substantial amount of someone else’s work.',
|
||||
},
|
||||
nameLabel: {
|
||||
id: 'project.settings.disclosures.derivative.name-label',
|
||||
defaultMessage: 'Name of original work',
|
||||
},
|
||||
namePlaceholder: {
|
||||
id: 'project.settings.disclosures.derivative.name-placeholder',
|
||||
defaultMessage: 'Example project',
|
||||
},
|
||||
linkLabel: {
|
||||
id: 'project.settings.disclosures.derivative.link-label',
|
||||
defaultMessage: 'Link to original work',
|
||||
},
|
||||
linkPlaceholder: {
|
||||
id: 'project.settings.disclosures.derivative.link-placeholder',
|
||||
defaultMessage: 'https://example.com',
|
||||
},
|
||||
noteLabel: {
|
||||
id: 'project.settings.disclosures.derivative.note-label',
|
||||
defaultMessage: 'Explain how your project is based on the original work',
|
||||
},
|
||||
})
|
||||
|
||||
function emptyDerivativeSource(): DerivativeSource {
|
||||
return { label: '' }
|
||||
}
|
||||
|
||||
function updateSource(index: number, patch: Partial<DerivativeSource>) {
|
||||
model.value.sources = model.value.sources.map((source, i) =>
|
||||
i === index ? { ...source, ...patch } : source,
|
||||
)
|
||||
}
|
||||
|
||||
watch(
|
||||
() => model.value.enabled,
|
||||
(enabled) => {
|
||||
if (enabled && model.value.sources.length === 0) {
|
||||
model.value.sources = [emptyDerivativeSource()]
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
function addSource() {
|
||||
model.value.sources = [...model.value.sources, emptyDerivativeSource()]
|
||||
}
|
||||
|
||||
function removeSource(index: number) {
|
||||
if (model.value.sources.length <= 1) return
|
||||
model.value.sources = model.value.sources.filter((_, i) => i !== index)
|
||||
}
|
||||
|
||||
function setOptionalField(
|
||||
index: number,
|
||||
field: 'link' | 'note',
|
||||
value: string | number | undefined,
|
||||
) {
|
||||
updateSource(index, {
|
||||
[field]: typeof value === 'string' && value ? value : null,
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<SettingsToggleCard
|
||||
v-model="model.enabled"
|
||||
:disabled="disabled"
|
||||
:icon="GitForkIcon"
|
||||
:title="formatMessage(messages.title)"
|
||||
:description="formatMessage(messages.description)"
|
||||
>
|
||||
<template #expanded>
|
||||
<div
|
||||
v-for="(source, index) in model.sources"
|
||||
:key="index"
|
||||
class="relative flex flex-col gap-4 rounded-2xl border border-solid border-surface-4 bg-surface-3 p-4"
|
||||
>
|
||||
<div class="absolute right-3 top-3">
|
||||
<Button
|
||||
v-if="model.sources.length > 1"
|
||||
type="quiet"
|
||||
color="red"
|
||||
:disabled="disabled"
|
||||
@click="removeSource(index)"
|
||||
>
|
||||
<TrashIcon />
|
||||
{{ formatMessage(commonMessages.removeButton) }}
|
||||
</Button>
|
||||
</div>
|
||||
<SettingsFormGroup
|
||||
:title="formatMessage(messages.nameLabel)"
|
||||
:title-for="`derivative-name-${index}`"
|
||||
class="max-w-[40rem]"
|
||||
>
|
||||
<StyledInput
|
||||
:id="`derivative-name-${index}`"
|
||||
:model-value="source.label"
|
||||
:disabled="disabled"
|
||||
:placeholder="formatMessage(messages.namePlaceholder)"
|
||||
@update:model-value="
|
||||
(value) => updateSource(index, { label: typeof value === 'string' ? value : '' })
|
||||
"
|
||||
/>
|
||||
</SettingsFormGroup>
|
||||
<SettingsFormGroup
|
||||
:title="formatMessage(messages.linkLabel)"
|
||||
:title-for="`derivative-link-${index}`"
|
||||
class="max-w-[40rem]"
|
||||
>
|
||||
<StyledInput
|
||||
:id="`derivative-link-${index}`"
|
||||
:model-value="source.link ?? undefined"
|
||||
type="url"
|
||||
:disabled="disabled"
|
||||
:placeholder="formatMessage(messages.linkPlaceholder)"
|
||||
@update:model-value="(value) => setOptionalField(index, 'link', value)"
|
||||
/>
|
||||
</SettingsFormGroup>
|
||||
<SettingsFormGroup
|
||||
:title="formatMessage(messages.noteLabel)"
|
||||
:title-for="`derivative-note-${index}`"
|
||||
class="max-w-[40rem]"
|
||||
>
|
||||
<StyledInput
|
||||
:id="`derivative-note-${index}`"
|
||||
:model-value="source.note ?? undefined"
|
||||
multiline
|
||||
:rows="3"
|
||||
:disabled="disabled"
|
||||
@update:model-value="(value) => setOptionalField(index, 'note', value)"
|
||||
/>
|
||||
</SettingsFormGroup>
|
||||
</div>
|
||||
<Button class="w-fit" :disabled="disabled" @click="addSource">
|
||||
<PlusIcon />
|
||||
{{ formatMessage(commonMessages.addAnotherButton) }}
|
||||
</Button>
|
||||
</template>
|
||||
</SettingsToggleCard>
|
||||
</template>
|
||||
+97
@@ -0,0 +1,97 @@
|
||||
<script setup lang="ts">
|
||||
import { CircleDollarSignIcon, ListPlusIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
Button,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
IconButton,
|
||||
SettingsFormGroup,
|
||||
SettingsToggleCard,
|
||||
StyledInput,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { watch } from 'vue'
|
||||
|
||||
import type { PaidFeaturesDisclosure } from './types'
|
||||
|
||||
const model = defineModel<PaidFeaturesDisclosure>({ required: true })
|
||||
|
||||
defineProps<{
|
||||
disabled?: boolean
|
||||
}>()
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const messages = defineMessages({
|
||||
title: {
|
||||
id: 'project.settings.disclosures.paid-features.title',
|
||||
defaultMessage: 'Contains paid features',
|
||||
},
|
||||
description: {
|
||||
id: 'project.settings.disclosures.paid-features.description',
|
||||
defaultMessage:
|
||||
'You must enable this if your project contains features that can be obtained by spending real-world money.',
|
||||
},
|
||||
featuresDescription: {
|
||||
id: 'project.settings.disclosures.paid-features.features-description',
|
||||
defaultMessage: 'List the types of paid features',
|
||||
},
|
||||
featurePlaceholder: {
|
||||
id: 'project.settings.disclosures.paid-features.feature-placeholder',
|
||||
defaultMessage: 'e.g. Cosmetics available as Patreon reward',
|
||||
},
|
||||
})
|
||||
|
||||
watch(
|
||||
() => model.value.enabled,
|
||||
(enabled) => {
|
||||
if (enabled && model.value.features.length === 0) {
|
||||
model.value.features = ['']
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
function addFeature() {
|
||||
model.value.features = [...model.value.features, '']
|
||||
}
|
||||
|
||||
function removeFeature(index: number) {
|
||||
if (model.value.features.length <= 1) return
|
||||
model.value.features = model.value.features.filter((_, i) => i !== index)
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<SettingsToggleCard
|
||||
v-model="model.enabled"
|
||||
:disabled="disabled"
|
||||
:icon="CircleDollarSignIcon"
|
||||
:title="formatMessage(messages.title)"
|
||||
:description="formatMessage(messages.description)"
|
||||
>
|
||||
<template #expanded>
|
||||
<SettingsFormGroup :title="formatMessage(messages.featuresDescription)">
|
||||
<div v-for="(_, index) in model.features" :key="index" class="flex items-center gap-2">
|
||||
<StyledInput
|
||||
v-model="model.features[index]"
|
||||
class="min-w-0 flex-1"
|
||||
:disabled="disabled"
|
||||
:placeholder="formatMessage(messages.featurePlaceholder)"
|
||||
/>
|
||||
<IconButton
|
||||
v-if="model.features.length > 1"
|
||||
:label="formatMessage(commonMessages.removeButton)"
|
||||
:disabled="disabled"
|
||||
@click="removeFeature(index)"
|
||||
>
|
||||
<XIcon />
|
||||
</IconButton>
|
||||
</div>
|
||||
</SettingsFormGroup>
|
||||
<Button class="w-fit" :disabled="disabled" @click="addFeature">
|
||||
<ListPlusIcon />
|
||||
{{ formatMessage(commonMessages.addAnotherButton) }}
|
||||
</Button>
|
||||
</template>
|
||||
</SettingsToggleCard>
|
||||
</template>
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
<script setup lang="ts">
|
||||
import { EyeIcon } from '@modrinth/assets'
|
||||
import {
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
SettingsFormGroup,
|
||||
SettingsToggleCard,
|
||||
StyledInput,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
|
||||
import type { NoteDisclosure } from './types'
|
||||
|
||||
const model = defineModel<NoteDisclosure>({ required: true })
|
||||
|
||||
defineProps<{
|
||||
disabled?: boolean
|
||||
}>()
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const messages = defineMessages({
|
||||
title: {
|
||||
id: 'project.settings.disclosures.photosensitivity.title',
|
||||
defaultMessage: 'Photosensitivity warning',
|
||||
},
|
||||
description: {
|
||||
id: 'project.settings.disclosures.photosensitivity.description',
|
||||
defaultMessage:
|
||||
'Enable this if your project contains anything that you think may be dangerous to certain people who are sensitive to flashing lights or patterns.',
|
||||
},
|
||||
notePlaceholder: {
|
||||
id: 'project.settings.disclosures.photosensitivity.note-placeholder',
|
||||
defaultMessage:
|
||||
'e.g. It adds a flashlight item that has a strobe mode. It can be disabled in Accessibility settings in-game.',
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<SettingsToggleCard
|
||||
v-model="model.enabled"
|
||||
:disabled="disabled"
|
||||
:icon="EyeIcon"
|
||||
:title="formatMessage(messages.title)"
|
||||
:description="formatMessage(messages.description)"
|
||||
>
|
||||
<template #expanded>
|
||||
<SettingsFormGroup
|
||||
:title="formatMessage(commonMessages.explanationLabel)"
|
||||
title-for="photosensitivity-disclosure-note"
|
||||
>
|
||||
<StyledInput
|
||||
id="photosensitivity-disclosure-note"
|
||||
v-model="model.note"
|
||||
multiline
|
||||
:rows="3"
|
||||
class="max-w-[40rem]"
|
||||
:disabled="disabled"
|
||||
:placeholder="formatMessage(messages.notePlaceholder)"
|
||||
/>
|
||||
</SettingsFormGroup>
|
||||
</template>
|
||||
</SettingsToggleCard>
|
||||
</template>
|
||||
+67
@@ -0,0 +1,67 @@
|
||||
<script setup lang="ts">
|
||||
import { CircuitBoardIcon } from '@modrinth/assets'
|
||||
import {
|
||||
defineMessages,
|
||||
SettingsFormGroup,
|
||||
SettingsToggleCard,
|
||||
StyledInput,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
|
||||
import type { NoteDisclosure } from './types'
|
||||
|
||||
const model = defineModel<NoteDisclosure>({ required: true })
|
||||
|
||||
defineProps<{
|
||||
disabled?: boolean
|
||||
}>()
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const messages = defineMessages({
|
||||
title: {
|
||||
id: 'project.settings.disclosures.system-interactions.title',
|
||||
defaultMessage: 'External system interactions',
|
||||
},
|
||||
description: {
|
||||
id: 'project.settings.disclosures.system-interactions.description',
|
||||
defaultMessage:
|
||||
"You must enable this if your project reads or edits things on the user's system outside of the game.",
|
||||
},
|
||||
noteLabel: {
|
||||
id: 'project.settings.disclosures.system-interactions.note-label',
|
||||
defaultMessage: 'Describe the external system interactions',
|
||||
},
|
||||
notePlaceholder: {
|
||||
id: 'project.settings.disclosures.system-interactions.note-placeholder',
|
||||
defaultMessage: 'e.g. It adds a file to the desktop called wake_up.txt',
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<SettingsToggleCard
|
||||
v-model="model.enabled"
|
||||
:disabled="disabled"
|
||||
:icon="CircuitBoardIcon"
|
||||
:title="formatMessage(messages.title)"
|
||||
:description="formatMessage(messages.description)"
|
||||
>
|
||||
<template #expanded>
|
||||
<SettingsFormGroup
|
||||
:title="formatMessage(messages.noteLabel)"
|
||||
title-for="system-interactions-disclosure-note"
|
||||
>
|
||||
<StyledInput
|
||||
id="system-interactions-disclosure-note"
|
||||
v-model="model.note"
|
||||
multiline
|
||||
:rows="3"
|
||||
class="max-w-[40rem]"
|
||||
:disabled="disabled"
|
||||
:placeholder="formatMessage(messages.notePlaceholder)"
|
||||
/>
|
||||
</SettingsFormGroup>
|
||||
</template>
|
||||
</SettingsToggleCard>
|
||||
</template>
|
||||
+136
@@ -0,0 +1,136 @@
|
||||
<script setup lang="ts">
|
||||
import { ListPlusIcon, RadioTowerIcon, TrashIcon } from '@modrinth/assets'
|
||||
import {
|
||||
Button,
|
||||
Chips,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
IconButton,
|
||||
SettingsFormGroup,
|
||||
SettingsToggleCard,
|
||||
StyledInput,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { watch } from 'vue'
|
||||
|
||||
import type { TelemetryConsent, TelemetryDisclosure } from './types'
|
||||
|
||||
const model = defineModel<TelemetryDisclosure>({ required: true })
|
||||
|
||||
defineProps<{
|
||||
disabled?: boolean
|
||||
}>()
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const CONSENT_MODELS: TelemetryConsent[] = ['opt_in', 'opt_out', 'always_active']
|
||||
|
||||
const consentMessages = defineMessages({
|
||||
opt_in: {
|
||||
id: 'project.settings.disclosures.telemetry.consent-opt-in',
|
||||
defaultMessage: 'Opt-in',
|
||||
},
|
||||
opt_out: {
|
||||
id: 'project.settings.disclosures.telemetry.consent-opt-out',
|
||||
defaultMessage: 'Opt-out',
|
||||
},
|
||||
always_active: {
|
||||
id: 'project.settings.disclosures.telemetry.consent-always-active',
|
||||
defaultMessage: 'Always active',
|
||||
},
|
||||
})
|
||||
|
||||
const messages = defineMessages({
|
||||
title: {
|
||||
id: 'project.settings.disclosures.telemetry.title',
|
||||
defaultMessage: 'Contains telemetry',
|
||||
},
|
||||
description: {
|
||||
id: 'project.settings.disclosures.telemetry.description',
|
||||
defaultMessage:
|
||||
'You must enable this if your project sends usage data back to yourself or a third party.',
|
||||
},
|
||||
consentDescription: {
|
||||
id: 'project.settings.disclosures.telemetry.consent-description',
|
||||
defaultMessage: 'What is the consent model of your telemetry?',
|
||||
},
|
||||
dataLabel: {
|
||||
id: 'project.settings.disclosures.telemetry.data-label',
|
||||
defaultMessage: 'What data is collected?',
|
||||
},
|
||||
dataDescription: {
|
||||
id: 'project.settings.disclosures.telemetry.data-description',
|
||||
defaultMessage:
|
||||
'You can either add a privacy policy, or a list of types of data that are collected. Remember to mention if it is anonymous or contains personally identifiable information (PII).',
|
||||
},
|
||||
dataPlaceholder: {
|
||||
id: 'project.settings.disclosures.telemetry.data-placeholder',
|
||||
defaultMessage:
|
||||
'e.g. Anonymous launch analytics to track Minecraft version and mod loader usage.',
|
||||
},
|
||||
})
|
||||
|
||||
watch(
|
||||
() => model.value.enabled,
|
||||
(enabled) => {
|
||||
if (enabled && model.value.entries.length === 0) {
|
||||
model.value.entries = ['']
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
function addEntry() {
|
||||
model.value.entries = [...model.value.entries, '']
|
||||
}
|
||||
|
||||
function removeEntry(index: number) {
|
||||
if (model.value.entries.length <= 1) return
|
||||
model.value.entries = model.value.entries.filter((_, i) => i !== index)
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<SettingsToggleCard
|
||||
v-model="model.enabled"
|
||||
:disabled="disabled"
|
||||
:icon="RadioTowerIcon"
|
||||
:title="formatMessage(messages.title)"
|
||||
:description="formatMessage(messages.description)"
|
||||
>
|
||||
<template #expanded>
|
||||
<SettingsFormGroup :title="formatMessage(messages.consentDescription)">
|
||||
<Chips
|
||||
v-model="model.consent"
|
||||
:items="CONSENT_MODELS"
|
||||
:capitalize="false"
|
||||
:format-label="(item: TelemetryConsent) => formatMessage(consentMessages[item])"
|
||||
/>
|
||||
</SettingsFormGroup>
|
||||
<SettingsFormGroup
|
||||
:title="formatMessage(messages.dataLabel)"
|
||||
:description="formatMessage(messages.dataDescription)"
|
||||
>
|
||||
<div v-for="(_, index) in model.entries" :key="index" class="flex items-center gap-2">
|
||||
<StyledInput
|
||||
v-model="model.entries[index]"
|
||||
class="min-w-0 flex-1"
|
||||
:disabled="disabled"
|
||||
:placeholder="formatMessage(messages.dataPlaceholder)"
|
||||
/>
|
||||
<IconButton
|
||||
v-if="model.entries.length > 1"
|
||||
:label="formatMessage(commonMessages.removeButton)"
|
||||
:disabled="disabled"
|
||||
@click="removeEntry(index)"
|
||||
>
|
||||
<TrashIcon />
|
||||
</IconButton>
|
||||
</div>
|
||||
</SettingsFormGroup>
|
||||
<Button class="w-fit" :disabled="disabled" @click="addEntry">
|
||||
<ListPlusIcon />
|
||||
{{ formatMessage(commonMessages.addAnotherButton) }}
|
||||
</Button>
|
||||
</template>
|
||||
</SettingsToggleCard>
|
||||
</template>
|
||||
@@ -0,0 +1,189 @@
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
|
||||
import type {
|
||||
DisclosureFormState,
|
||||
DisclosureOf,
|
||||
DisclosureType,
|
||||
NoteDisclosure,
|
||||
ProjectDisclosure,
|
||||
ProjectDisclosureData,
|
||||
} from './types'
|
||||
|
||||
function findDisclosure<T extends DisclosureType>(
|
||||
disclosures: ProjectDisclosureData[],
|
||||
type: T,
|
||||
): DisclosureOf<T> | undefined {
|
||||
return disclosures.find((disclosure): disclosure is DisclosureOf<T> => disclosure.type === type)
|
||||
}
|
||||
|
||||
type NoteDisclosureType =
|
||||
| 'advertisements'
|
||||
| 'epilepsy_triggers'
|
||||
| 'system_interactions'
|
||||
| 'archived'
|
||||
|
||||
function createNoteModel(
|
||||
disclosures: ProjectDisclosureData[],
|
||||
type: NoteDisclosureType,
|
||||
): NoteDisclosure {
|
||||
const disclosure = findDisclosure(disclosures, type)
|
||||
return {
|
||||
enabled: !!disclosure,
|
||||
note: disclosure?.note ?? '',
|
||||
}
|
||||
}
|
||||
|
||||
function nonemptyOrPlaceholder(values: string[]): string[] {
|
||||
return values.length > 0 ? [...values] : ['']
|
||||
}
|
||||
|
||||
export function disclosuresToForm(disclosures: ProjectDisclosureData[]): DisclosureFormState {
|
||||
const ai = findDisclosure(disclosures, 'ai_content')
|
||||
const paidFeatures = findDisclosure(disclosures, 'paid_features')
|
||||
const telemetry = findDisclosure(disclosures, 'telemetry')
|
||||
const derivative = findDisclosure(disclosures, 'derivative_work')
|
||||
|
||||
return {
|
||||
ai: {
|
||||
enabled: !!ai,
|
||||
uses: ai ? [...(ai.uses ?? [])] : [],
|
||||
note: ai?.note ?? '',
|
||||
},
|
||||
advertising: createNoteModel(disclosures, 'advertisements'),
|
||||
paidFeatures: {
|
||||
enabled: !!paidFeatures,
|
||||
features: paidFeatures ? nonemptyOrPlaceholder(paidFeatures.features) : [],
|
||||
},
|
||||
telemetry: {
|
||||
enabled: !!telemetry,
|
||||
consent: telemetry?.consent ?? 'opt_in',
|
||||
entries: telemetry ? nonemptyOrPlaceholder(telemetry.data_collected) : [],
|
||||
},
|
||||
derivative: {
|
||||
enabled: !!derivative,
|
||||
sources: derivative ? derivative.sources.map((source) => ({ ...source })) : [],
|
||||
},
|
||||
photosensitivity: createNoteModel(disclosures, 'epilepsy_triggers'),
|
||||
systemInteractions: createNoteModel(disclosures, 'system_interactions'),
|
||||
archived: createNoteModel(disclosures, 'archived'),
|
||||
}
|
||||
}
|
||||
|
||||
export function formToDisclosures(form: DisclosureFormState): ProjectDisclosure[] {
|
||||
const set: ProjectDisclosure[] = []
|
||||
|
||||
if (form.ai.enabled) {
|
||||
set.push({
|
||||
type: 'ai_content',
|
||||
uses: [...form.ai.uses],
|
||||
note: form.ai.note.trim() || null,
|
||||
})
|
||||
}
|
||||
|
||||
if (form.advertising.enabled) {
|
||||
set.push({ type: 'advertisements', note: form.advertising.note.trim() || null })
|
||||
}
|
||||
|
||||
if (form.paidFeatures.enabled) {
|
||||
set.push({
|
||||
type: 'paid_features',
|
||||
features: form.paidFeatures.features.map((feature) => feature.trim()).filter(Boolean),
|
||||
})
|
||||
}
|
||||
|
||||
if (form.telemetry.enabled) {
|
||||
set.push({
|
||||
type: 'telemetry',
|
||||
consent: form.telemetry.consent,
|
||||
data_collected: form.telemetry.entries.map((entry) => entry.trim()).filter(Boolean),
|
||||
})
|
||||
}
|
||||
|
||||
if (form.derivative.enabled) {
|
||||
set.push({
|
||||
type: 'derivative_work',
|
||||
sources: form.derivative.sources.map((source) => ({
|
||||
label: source.label.trim(),
|
||||
link: source.link?.trim() || null,
|
||||
note: source.note?.trim() || null,
|
||||
})),
|
||||
})
|
||||
}
|
||||
|
||||
if (form.photosensitivity.enabled) {
|
||||
set.push({ type: 'epilepsy_triggers', note: form.photosensitivity.note.trim() || null })
|
||||
}
|
||||
|
||||
if (form.systemInteractions.enabled) {
|
||||
set.push({ type: 'system_interactions', note: form.systemInteractions.note.trim() || null })
|
||||
}
|
||||
|
||||
if (form.archived.enabled) {
|
||||
set.push({ type: 'archived', note: form.archived.note.trim() || null })
|
||||
}
|
||||
|
||||
return set
|
||||
}
|
||||
|
||||
export function toModifyRequest(
|
||||
form: DisclosureFormState,
|
||||
previous: DisclosureFormState,
|
||||
): Labrinth.Projects.v3.ModifyProjectDisclosures {
|
||||
const set = formToDisclosures(form)
|
||||
const nextTypes = new Set(set.map((disclosure) => disclosure.type))
|
||||
return {
|
||||
set,
|
||||
remove: formToDisclosures(previous)
|
||||
.map((disclosure) => disclosure.type)
|
||||
.filter((type) => !nextTypes.has(type)),
|
||||
}
|
||||
}
|
||||
|
||||
export function toCachedDisclosures(set: ProjectDisclosure[]): ProjectDisclosureData[] {
|
||||
const now = new Date().toISOString()
|
||||
return set.map((disclosure) => ({
|
||||
...disclosure,
|
||||
set_by_moderator: false,
|
||||
updated_at: now,
|
||||
updated_by: null,
|
||||
}))
|
||||
}
|
||||
|
||||
export type DisclosureFormIssue =
|
||||
| 'advertising-note'
|
||||
| 'paid-features-empty'
|
||||
| 'telemetry-empty'
|
||||
| 'derivative-empty'
|
||||
| 'derivative-source-label'
|
||||
| 'photosensitivity-note'
|
||||
| 'system-interactions-note'
|
||||
|
||||
export function getDisclosureFormIssues(form: DisclosureFormState): DisclosureFormIssue[] {
|
||||
const issues: DisclosureFormIssue[] = []
|
||||
const missingNote = (model: NoteDisclosure) => model.enabled && !model.note.trim()
|
||||
|
||||
if (missingNote(form.advertising)) {
|
||||
issues.push('advertising-note')
|
||||
}
|
||||
if (form.paidFeatures.enabled && !form.paidFeatures.features.some((feature) => feature.trim())) {
|
||||
issues.push('paid-features-empty')
|
||||
}
|
||||
if (form.telemetry.enabled && !form.telemetry.entries.some((entry) => entry.trim())) {
|
||||
issues.push('telemetry-empty')
|
||||
}
|
||||
if (form.derivative.enabled) {
|
||||
if (form.derivative.sources.length === 0) {
|
||||
issues.push('derivative-empty')
|
||||
} else if (form.derivative.sources.some((source) => !source.label?.trim())) {
|
||||
issues.push('derivative-source-label')
|
||||
}
|
||||
}
|
||||
if (missingNote(form.photosensitivity)) {
|
||||
issues.push('photosensitivity-note')
|
||||
}
|
||||
if (missingNote(form.systemInteractions)) {
|
||||
issues.push('system-interactions-note')
|
||||
}
|
||||
|
||||
return issues
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
export { default as AdvertisingDisclosureCard } from './AdvertisingDisclosureCard.vue'
|
||||
export { default as AiDisclosureCard } from './AiDisclosureCard.vue'
|
||||
export { default as ArchivedDisclosureCard } from './ArchivedDisclosureCard.vue'
|
||||
export { default as DerivativeDisclosureCard } from './DerivativeDisclosureCard.vue'
|
||||
export * from './form'
|
||||
export { default as PaidFeaturesDisclosureCard } from './PaidFeaturesDisclosureCard.vue'
|
||||
export { default as PhotosensitivityDisclosureCard } from './PhotosensitivityDisclosureCard.vue'
|
||||
export { default as SystemInteractionsDisclosureCard } from './SystemInteractionsDisclosureCard.vue'
|
||||
export { default as TelemetryDisclosureCard } from './TelemetryDisclosureCard.vue'
|
||||
export * from './types'
|
||||
@@ -0,0 +1,47 @@
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
|
||||
export type TelemetryConsent = Labrinth.Projects.v3.TelemetryConsent
|
||||
export type AiUsage = Labrinth.Projects.v3.AiUsage
|
||||
export type DerivativeSource = Labrinth.Projects.v3.DerivativeSource
|
||||
export type ProjectDisclosure = Labrinth.Projects.v3.ProjectDisclosure
|
||||
export type ProjectDisclosureData = Labrinth.Projects.v3.ProjectDisclosureData
|
||||
export type DisclosureType = Labrinth.Projects.v3.ProjectDisclosureType
|
||||
export type DisclosureOf<T extends DisclosureType> = Labrinth.Projects.v3.ProjectDisclosureOf<T>
|
||||
|
||||
export type NoteDisclosure = {
|
||||
enabled: boolean
|
||||
note: string
|
||||
}
|
||||
|
||||
export type AiDisclosure = {
|
||||
enabled: boolean
|
||||
uses: AiUsage[]
|
||||
note: string
|
||||
}
|
||||
|
||||
export type PaidFeaturesDisclosure = {
|
||||
enabled: boolean
|
||||
features: string[]
|
||||
}
|
||||
|
||||
export type TelemetryDisclosure = {
|
||||
enabled: boolean
|
||||
consent: TelemetryConsent
|
||||
entries: string[]
|
||||
}
|
||||
|
||||
export type DerivativeDisclosure = {
|
||||
enabled: boolean
|
||||
sources: DerivativeSource[]
|
||||
}
|
||||
|
||||
export type DisclosureFormState = {
|
||||
ai: AiDisclosure
|
||||
advertising: NoteDisclosure
|
||||
paidFeatures: PaidFeaturesDisclosure
|
||||
telemetry: TelemetryDisclosure
|
||||
derivative: DerivativeDisclosure
|
||||
photosensitivity: NoteDisclosure
|
||||
systemInteractions: NoteDisclosure
|
||||
archived: NoteDisclosure
|
||||
}
|
||||
@@ -90,7 +90,14 @@
|
||||
</div>
|
||||
<div class="report-type">
|
||||
<Badge v-if="report.closed" type="closed" />
|
||||
<Badge :type="`Reported for ${report.report_type}`" color="orange" />
|
||||
<Badge
|
||||
:type="
|
||||
formatMessage(messages.reportedFor, {
|
||||
type: formatReportType(formatMessage, report.report_type),
|
||||
})
|
||||
"
|
||||
color="orange"
|
||||
/>
|
||||
</div>
|
||||
<div v-if="showMessage" class="markdown-body" v-html="renderHighlightedString(report.body)" />
|
||||
<ThreadSummary
|
||||
@@ -125,12 +132,22 @@
|
||||
|
||||
<script setup>
|
||||
import { BoxesIcon, ReportIcon, UnknownIcon, VersionIcon } from '@modrinth/assets'
|
||||
import { Avatar, Badge, CopyCode, useFormatDateTime, useRelativeTime } from '@modrinth/ui'
|
||||
import {
|
||||
Avatar,
|
||||
Badge,
|
||||
CopyCode,
|
||||
defineMessages,
|
||||
formatReportType,
|
||||
useFormatDateTime,
|
||||
useRelativeTime,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { formatProjectType, renderHighlightedString } from '@modrinth/utils'
|
||||
|
||||
import ThreadSummary from '~/components/ui/thread/ThreadSummary.vue'
|
||||
import { getProjectTypeForUrl } from '~/helpers/projects.js'
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
const formatRelativeTime = useRelativeTime()
|
||||
const formatDateTime = useFormatDateTime({
|
||||
timeStyle: 'short',
|
||||
@@ -165,6 +182,13 @@ defineProps({
|
||||
})
|
||||
|
||||
const flags = useFeatureFlags()
|
||||
|
||||
const messages = defineMessages({
|
||||
reportedFor: {
|
||||
id: 'report.reported-for',
|
||||
defaultMessage: 'Reported for {type}',
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@@ -1,13 +1,20 @@
|
||||
<template>
|
||||
<template v-if="moderation">
|
||||
<Chips v-model="reasonFilter" :items="reasons" />
|
||||
<Chips
|
||||
v-model="reasonFilter"
|
||||
:items="reasons"
|
||||
:format-label="formatReasonLabel"
|
||||
:capitalize="false"
|
||||
/>
|
||||
<p v-if="reports.length === MAX_REPORTS" class="text-red">
|
||||
There are at least {{ MAX_REPORTS }} open reports. This page is at its max reports and will
|
||||
not show any more recent ones.
|
||||
</p>
|
||||
<p v-else-if="reasonFilter === 'All'">There are {{ filteredReports.length }} open reports.</p>
|
||||
<p v-else>
|
||||
There are {{ filteredReports.length }}/{{ reports.length }} open '{{ reasonFilter }}' reports.
|
||||
There are {{ filteredReports.length }}/{{ reports.length }} open '{{
|
||||
formatReportType(formatMessage, reasonFilter)
|
||||
}}' reports.
|
||||
</p>
|
||||
</template>
|
||||
<ReportInfo
|
||||
@@ -24,7 +31,7 @@
|
||||
<p v-if="filteredReports.length === 0">You don't have any active reports.</p>
|
||||
</template>
|
||||
<script setup>
|
||||
import { Chips, injectModrinthClient } from '@modrinth/ui'
|
||||
import { Chips, formatReportType, injectModrinthClient, useVIntl } from '@modrinth/ui'
|
||||
import { useQuery } from '@tanstack/vue-query'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
@@ -43,10 +50,16 @@ const props = defineProps({
|
||||
},
|
||||
})
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
const client = injectModrinthClient()
|
||||
const viewMode = ref('open')
|
||||
const reasonFilter = ref('All')
|
||||
|
||||
const formatReasonLabel = (reason) => {
|
||||
if (reason === 'All') return reason
|
||||
return formatReportType(formatMessage, reason)
|
||||
}
|
||||
|
||||
const MAX_REPORTS = 1500
|
||||
|
||||
const { data: rawReportsData } = useQuery({
|
||||
|
||||
@@ -38,7 +38,6 @@ export const DEFAULT_FEATURE_FLAGS = validateValues({
|
||||
showProjectPageCreateServersTooltip: true,
|
||||
showProjectPageQuickServerButton: false,
|
||||
newProjectGeneralSettings: false,
|
||||
newProjectEnvironmentSettings: true,
|
||||
serverRamAsBytesAlwaysOn: false,
|
||||
archonSentryCapture: false,
|
||||
hideRussiaCensorshipBanner: false,
|
||||
@@ -58,6 +57,7 @@ export const DEFAULT_FEATURE_FLAGS = validateValues({
|
||||
versionDevInfoCollapsed: true,
|
||||
alwaysShowVersionDevInfo: false,
|
||||
advancedFiltersCollapsed: true,
|
||||
dismissedPhotosensitivityFilterWarning: false,
|
||||
} as const)
|
||||
|
||||
export type FeatureFlag = keyof typeof DEFAULT_FEATURE_FLAGS
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
import {
|
||||
defineMessages,
|
||||
injectProjectPageContext,
|
||||
type MessageDescriptor,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
|
||||
const messages = defineMessages({
|
||||
headTitle: {
|
||||
id: 'project.settings.head-title',
|
||||
defaultMessage: '⚙️ {section} - {project}',
|
||||
},
|
||||
})
|
||||
|
||||
export function useProjectSettingsHeadTitle(section: MessageDescriptor) {
|
||||
const { formatMessage } = useVIntl()
|
||||
const { projectV2: project } = injectProjectPageContext()
|
||||
|
||||
useHead({
|
||||
title: () =>
|
||||
`${formatMessage(messages.headTitle, {
|
||||
section: formatMessage(section),
|
||||
project: project.value.title,
|
||||
})}`,
|
||||
})
|
||||
}
|
||||
@@ -1,15 +1,57 @@
|
||||
import type { AbstractModrinthClient } from '@modrinth/api-client'
|
||||
import type { QueryClient } from '@tanstack/query-core'
|
||||
|
||||
export const STALE_TIME = 1000 * 60 * 5 // 5 minutes
|
||||
export const STALE_TIME_LONG = 1000 * 60 * 10 // 10 minutes
|
||||
|
||||
/** Anything with a canonical project ID and optional slug (search hits, full projects, etc.). */
|
||||
export type ProjectCheckIdentity = {
|
||||
id?: string | null
|
||||
project_id?: string | null
|
||||
slug?: string | null
|
||||
}
|
||||
|
||||
/**
|
||||
* Warm `['project', 'check', …]` so navigating to a project by slug skips the check network round-trip.
|
||||
* Safe to call with search hits, full project objects, or mixed lists.
|
||||
*/
|
||||
export function warmProjectCheckCaches(
|
||||
queryClient: QueryClient,
|
||||
projects: ProjectCheckIdentity | readonly ProjectCheckIdentity[] | null | undefined,
|
||||
) {
|
||||
const list = projects == null ? [] : Array.isArray(projects) ? projects : [projects]
|
||||
for (const project of list) {
|
||||
const id = project.id ?? project.project_id
|
||||
if (!id) continue
|
||||
queryClient.setQueryData(['project', 'check', id], { id })
|
||||
if (project.slug) {
|
||||
queryClient.setQueryData(['project', 'check', project.slug], { id })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Project query options.
|
||||
*
|
||||
* `v2` / `v3` / members / etc. must be keyed by the **canonical project ID**.
|
||||
* When you only have a route slug (or unknown id-or-slug), resolve with `check` first.
|
||||
*/
|
||||
export const projectQueryOptions = {
|
||||
/** Resolve a slug or ID to the canonical project ID. */
|
||||
check: (idOrSlug: string, client: AbstractModrinthClient) => ({
|
||||
queryKey: ['project', 'check', idOrSlug] as const,
|
||||
queryFn: () => client.labrinth.projects_v2.check(idOrSlug),
|
||||
staleTime: STALE_TIME,
|
||||
}),
|
||||
|
||||
/** @param projectId Canonical project ID (not slug) */
|
||||
v2: (projectId: string, client: AbstractModrinthClient) => ({
|
||||
queryKey: ['project', 'v2', projectId] as const,
|
||||
queryFn: () => client.labrinth.projects_v2.get(projectId),
|
||||
staleTime: STALE_TIME,
|
||||
}),
|
||||
|
||||
/** @param projectId Canonical project ID (not slug) */
|
||||
v3: (projectId: string, client: AbstractModrinthClient) => ({
|
||||
queryKey: ['project', 'v3', projectId] as const,
|
||||
queryFn: () => client.labrinth.projects_v3.get(projectId),
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
import type { C2paSdk } from '@contentauth/c2pa-web'
|
||||
import { createC2pa, isSupportedReaderFormat } from '@contentauth/c2pa-web/inline'
|
||||
|
||||
// https://cv.iptc.org/newscodes/digitalsourcetype/
|
||||
// only detecting generative AI types
|
||||
const AI_DIGITAL_SOURCE_TYPES = [
|
||||
'http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia',
|
||||
'http://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicData',
|
||||
'http://cv.iptc.org/newscodes/digitalsourcetype/compositeWithTrainedAlgorithmicMedia',
|
||||
'http://cv.iptc.org/newscodes/digitalsourcetype/compositeSynthetic',
|
||||
]
|
||||
|
||||
let c2paInstance: Promise<C2paSdk> | null = null
|
||||
|
||||
function getC2pa() {
|
||||
if (!c2paInstance) {
|
||||
c2paInstance = createC2pa()
|
||||
}
|
||||
return c2paInstance
|
||||
}
|
||||
|
||||
// reference: https://github.com/contentauth/c2pa-js/blob/main/packages/c2pa-web/README.md
|
||||
export async function fileDeclaresAi(file: File): Promise<boolean> {
|
||||
try {
|
||||
if (!isSupportedReaderFormat(file.type)) {
|
||||
return false
|
||||
}
|
||||
|
||||
const c2pa = await getC2pa()
|
||||
|
||||
const reader = await c2pa.reader.fromBlob(file.type, file)
|
||||
const manifestStore = await reader.manifestStore()
|
||||
|
||||
await reader.free()
|
||||
|
||||
const manifestJson = JSON.stringify(manifestStore)
|
||||
return AI_DIGITAL_SOURCE_TYPES.some((type) => manifestJson.includes(type))
|
||||
} catch {
|
||||
return false
|
||||
}
|
||||
}
|
||||
@@ -2378,12 +2378,6 @@
|
||||
"project.settings.permissions.sort.status": {
|
||||
"message": "Stav"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Nastavení"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Přejít na přehled projektů"
|
||||
},
|
||||
"project.versions.title": {
|
||||
"message": "Verze"
|
||||
},
|
||||
|
||||
@@ -2486,15 +2486,6 @@
|
||||
"project.settings.tags.upload-version-first": {
|
||||
"message": "Upload venligst en version først for at kunne vælge tags!"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Indstillinger"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Gå til projekt kontrolpanel"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} er blevet arkiveret. {title} vil ikke modtage flere opdateringer medmindre forfatteren beslutter sig for at fjerne projektet fra arkivet."
|
||||
},
|
||||
"project.versions.copy-id-option": {
|
||||
"message": "Kopier ID"
|
||||
},
|
||||
|
||||
@@ -1206,7 +1206,7 @@
|
||||
"message": "Details"
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.detected-loaders": {
|
||||
"message": "Erkannte Plattformen"
|
||||
"message": "Erkannte Loader"
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.detected-versions": {
|
||||
"message": "Erkannte Versionen"
|
||||
@@ -1221,7 +1221,7 @@
|
||||
"message": "Dateien"
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.loaders": {
|
||||
"message": "Plattformen"
|
||||
"message": "Loader"
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.metadata-tab": {
|
||||
"message": "Metadaten"
|
||||
@@ -1233,13 +1233,13 @@
|
||||
"message": "Modpack-Versionen können nicht bearbeitet werden"
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.no-dependencies-added": {
|
||||
"message": "Es wurden keine Abhängigkeiten hinzugefügt."
|
||||
"message": "Keine Abhängigkeiten hinzugefügt."
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.no-environment-set": {
|
||||
"message": "Es wurde keine Umgebung festgelegt."
|
||||
"message": "Keine Umgebung wurde festgelegt."
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.no-loaders-selected": {
|
||||
"message": "Es wurden keine Plattformen ausgewählt."
|
||||
"message": "Keine Loader ausgewählt."
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.no-mod-loader": {
|
||||
"message": "Kein Modloader"
|
||||
@@ -3929,9 +3929,27 @@
|
||||
"project.settings.tags.featured-tags": {
|
||||
"message": "Hervorgehobene Tags"
|
||||
},
|
||||
"project.settings.tags.featured-tags-required": {
|
||||
"message": "Du musst mindestens ein hervorgehobenes Tag haben."
|
||||
},
|
||||
"project.settings.tags.featured-tags-select-description": {
|
||||
"message": "Wähle deine relevantesten Tags aus. Diese werden vor den übrigen Tags angezeigt."
|
||||
},
|
||||
"project.settings.tags.features-description": {
|
||||
"message": "Wähle alle Funktionen aus, die dein {type} nutzt."
|
||||
},
|
||||
"project.settings.tags.group-title.categories": {
|
||||
"message": "{showType, select, yes {{types} Kategorien} other {Kategorien}}"
|
||||
},
|
||||
"project.settings.tags.group-title.features": {
|
||||
"message": "{showType, select, yes {{types} Funktionen} other {Funktionen}}"
|
||||
},
|
||||
"project.settings.tags.group-title.performance-impact": {
|
||||
"message": "{showType, select, yes {{types} Auswirkungen auf die Leistung} other {Auswirkungen auf die Leistung}}"
|
||||
},
|
||||
"project.settings.tags.group-title.resolutions": {
|
||||
"message": "{showType, select, yes {{types} Auflösungen} other {Auflösungen}}"
|
||||
},
|
||||
"project.settings.tags.multiple-resolution-tags-warning": {
|
||||
"message": "Du hast {count} Auflösungs-Tags ({tags}) ausgewählt. Ressourcenpakete sollten in der Regel nur einen Auflösungs-Tag haben."
|
||||
},
|
||||
@@ -3959,15 +3977,6 @@
|
||||
"project.settings.tags.upload-version-first": {
|
||||
"message": "Bitte lade zuerst eine Version hoch, um Tags auswählen zu können!"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Einstellungen"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Projekt-Dashboard besuchen"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} wurde archiviert. {title} wird keine weiteren Updates erhalten, es sei denn, der Autor entscheided sich, das Projekt zu Dearchivieren."
|
||||
},
|
||||
"project.versions.copy-id-option": {
|
||||
"message": "ID kopieren"
|
||||
},
|
||||
|
||||
@@ -1206,7 +1206,7 @@
|
||||
"message": "Details"
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.detected-loaders": {
|
||||
"message": "Erkannte Plattformen"
|
||||
"message": "Erkannte Loader"
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.detected-versions": {
|
||||
"message": "Erkannte Versionen"
|
||||
@@ -1221,7 +1221,7 @@
|
||||
"message": "Dateien"
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.loaders": {
|
||||
"message": "Plattformen"
|
||||
"message": "Loader"
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.metadata-tab": {
|
||||
"message": "Metadaten"
|
||||
@@ -1233,13 +1233,13 @@
|
||||
"message": "Modpack-Versionen können nicht bearbeitet werden"
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.no-dependencies-added": {
|
||||
"message": "Es wurden keine Abhängigkeiten hinzugefügt."
|
||||
"message": "Keine Abhängigkeiten hinzugefügt."
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.no-environment-set": {
|
||||
"message": "Es wurde keine Umgebung festgelegt."
|
||||
"message": "Keine Umgebung wurde festgelegt."
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.no-loaders-selected": {
|
||||
"message": "Es wurden keine Plattformen ausgewählt."
|
||||
"message": "Keine Loader ausgewählt."
|
||||
},
|
||||
"create-project-version.create-modal.stage.metadata.no-mod-loader": {
|
||||
"message": "Kein Modloader"
|
||||
@@ -3929,9 +3929,27 @@
|
||||
"project.settings.tags.featured-tags": {
|
||||
"message": "Hervorgehobene Tags"
|
||||
},
|
||||
"project.settings.tags.featured-tags-required": {
|
||||
"message": "Du musst mindestens ein hervorgehobenes Tag haben."
|
||||
},
|
||||
"project.settings.tags.featured-tags-select-description": {
|
||||
"message": "Wähle deine relevantesten Tags aus. Diese werden vor den übrigen Tags angezeigt."
|
||||
},
|
||||
"project.settings.tags.features-description": {
|
||||
"message": "Wähle alle Funktionen aus, die dein {type} nutzt."
|
||||
},
|
||||
"project.settings.tags.group-title.categories": {
|
||||
"message": "{showType, select, yes {{types} Kategorien} other {Kategorien}}"
|
||||
},
|
||||
"project.settings.tags.group-title.features": {
|
||||
"message": "{showType, select, yes {{types} Funktionen} other {Funktionen}}"
|
||||
},
|
||||
"project.settings.tags.group-title.performance-impact": {
|
||||
"message": "{showType, select, yes {{types} Auswirkungen auf die Leistung} other {Auswirkungen auf die Leistung}}"
|
||||
},
|
||||
"project.settings.tags.group-title.resolutions": {
|
||||
"message": "{showType, select, yes {{types} Auflösungen} other {Auflösungen}}"
|
||||
},
|
||||
"project.settings.tags.multiple-resolution-tags-warning": {
|
||||
"message": "Du hast {count} Auflösungs-Tags ({tags}) ausgewählt. Ressourcenpakete sollten in der Regel nur einen Auflösungs-Tag haben."
|
||||
},
|
||||
@@ -3959,15 +3977,6 @@
|
||||
"project.settings.tags.upload-version-first": {
|
||||
"message": "Bitte lade zuerst eine Version hoch, um Tags auswählen zu können!"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Einstellungen"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Projekt-Dashboard besuchen"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} wurde archiviert. {title} wird keine weiteren Updates erhalten, es sei denn, der Autor entscheidet sich das Projekt zu dearchivieren."
|
||||
},
|
||||
"project.versions.copy-id-option": {
|
||||
"message": "ID kopieren"
|
||||
},
|
||||
@@ -5007,7 +5016,7 @@
|
||||
"message": "Entwicklermodus deaktivieren"
|
||||
},
|
||||
"settings.display.banner.developer-mode.description": {
|
||||
"message": "Der <strong>Entwicklermodus</strong> ist aktiviert. Damit kannst du die internen IDs verschiedener Elemente in Modrinth anzeigen, was für Entwickler, welche die Modrinth-API verwenden, hilfreich sein kann. Klickst du 5x auf das Modrinth-Logo unten auf der Seite, um den Entwicklermodus umzuschalten."
|
||||
"message": "Der <strong>Entwicklermodus</strong> ist aktiviert. Damit kannst du die internen IDs verschiedener Elemente in Modrinth anzeigen, was für Entwickler, welche die Modrinth-API verwenden, hilfreich sein kann. Klick fünfmal auf das Modrinth-Logo unten auf der Seite, um den Entwicklermodus umzuschalten."
|
||||
},
|
||||
"settings.display.flags.description": {
|
||||
"message": "Bestimmte Funktionen auf diesem Gerät aktivieren oder deaktivieren."
|
||||
|
||||
@@ -3449,6 +3449,12 @@
|
||||
"project-type.shader.singular": {
|
||||
"message": "Shader"
|
||||
},
|
||||
"project.actions.back-to-all-projects": {
|
||||
"message": "Back to all projects"
|
||||
},
|
||||
"project.actions.back-to-project-page": {
|
||||
"message": "Back to project page"
|
||||
},
|
||||
"project.actions.create-server": {
|
||||
"message": "Create a server"
|
||||
},
|
||||
@@ -3461,6 +3467,9 @@
|
||||
"project.actions.edit-project": {
|
||||
"message": "Edit project"
|
||||
},
|
||||
"project.actions.project-page": {
|
||||
"message": "Project page"
|
||||
},
|
||||
"project.actions.rescan-modpack": {
|
||||
"message": "Rescan modpack"
|
||||
},
|
||||
@@ -3476,6 +3485,15 @@
|
||||
"project.actions.servers-promo.title": {
|
||||
"message": "Create a server"
|
||||
},
|
||||
"project.ai-image-warning-modal.body.1": {
|
||||
"message": "Using AI-generated images to represent your project is not allowed. Attempting to work around detection may lead to your Modrinth account being suspended."
|
||||
},
|
||||
"project.ai-image-warning-modal.body.2": {
|
||||
"message": "See section 6 of <rules>Modrinth's Content Rules</rules> for more information on our generative AI policy."
|
||||
},
|
||||
"project.ai-image-warning-modal.title": {
|
||||
"message": "AI-generated images not allowed"
|
||||
},
|
||||
"project.collections.create-new": {
|
||||
"message": "Create new collection"
|
||||
},
|
||||
@@ -3737,6 +3755,204 @@
|
||||
"project.notification.updated.title": {
|
||||
"message": "Project updated"
|
||||
},
|
||||
"project.settings.back-to-all-projects": {
|
||||
"message": "Back to all projects"
|
||||
},
|
||||
"project.settings.back-to-project-page": {
|
||||
"message": "Back to project page"
|
||||
},
|
||||
"project.settings.danger-zone": {
|
||||
"message": "Danger zone"
|
||||
},
|
||||
"project.settings.delete-project.button": {
|
||||
"message": "Delete project"
|
||||
},
|
||||
"project.settings.delete-project.confirmation.description": {
|
||||
"message": "If you proceed, all of this project's information and all of its versions will be immediately deleted from our database. None of it is recoverable later if you change your mind. Consider just setting your project to be Private for a less permanent option."
|
||||
},
|
||||
"project.settings.delete-project.confirmation.proceed-text": {
|
||||
"message": "Permanently delete project"
|
||||
},
|
||||
"project.settings.delete-project.confirmation.title": {
|
||||
"message": "Are you sure you want to delete this project?"
|
||||
},
|
||||
"project.settings.delete-project.description.1": {
|
||||
"message": "Permanently deletes this project from Modrinth. Deleted projects <emphasis>cannot be recovered</emphasis> by Modrinth staff or support."
|
||||
},
|
||||
"project.settings.delete-project.description.2": {
|
||||
"message": "Files uploaded to this project that are actively used in Modpacks hosted on Modrinth may continue to exist."
|
||||
},
|
||||
"project.settings.delete-project.title": {
|
||||
"message": "Delete project"
|
||||
},
|
||||
"project.settings.disclosures.advertising.description.1": {
|
||||
"message": "You must enable this if your project contains advertisements, sponsorships, or promotions of other works."
|
||||
},
|
||||
"project.settings.disclosures.advertising.description.2": {
|
||||
"message": "If the promotion has no direct monetary value <emphasis>and</emphasis> it is for something that the average person would consider <italic>relevant</italic> and <italic>unobtrusive</italic> (such as a link to your Modrinth profile in the corner of the settings page for your own mod), we would not consider that an advertisement."
|
||||
},
|
||||
"project.settings.disclosures.advertising.note-placeholder": {
|
||||
"message": "e.g. Adds the Modrinth SMP server to your server list automatically."
|
||||
},
|
||||
"project.settings.disclosures.advertising.title": {
|
||||
"message": "Contains advertisements"
|
||||
},
|
||||
"project.settings.disclosures.ai.content-rules": {
|
||||
"message": "Please refer to Section 6 of <rules>Modrinth's Content Rules</rules> for more information."
|
||||
},
|
||||
"project.settings.disclosures.ai.description": {
|
||||
"message": "You must enable this if this project contains a substantial amount of AI-generated code, any\n\t\t\t\tassets that are substantially AI-generated, the project's functionality relies on the use of\n\t\t\t\tgenerative AI, or if any element of your project's page such as description or publishing\n\t\t\t\trelies on generative AI."
|
||||
},
|
||||
"project.settings.disclosures.ai.note-placeholder": {
|
||||
"message": "e.g. The Chinese and Arabic translations are AI-generated."
|
||||
},
|
||||
"project.settings.disclosures.ai.title": {
|
||||
"message": "Contains AI-generated content"
|
||||
},
|
||||
"project.settings.disclosures.ai.types-assets": {
|
||||
"message": "Assets"
|
||||
},
|
||||
"project.settings.disclosures.ai.types-code": {
|
||||
"message": "Code"
|
||||
},
|
||||
"project.settings.disclosures.ai.types-description": {
|
||||
"message": "What is generative AI being used for?"
|
||||
},
|
||||
"project.settings.disclosures.ai.types-functionality": {
|
||||
"message": "Functionality"
|
||||
},
|
||||
"project.settings.disclosures.ai.types-text": {
|
||||
"message": "Text"
|
||||
},
|
||||
"project.settings.disclosures.archived.banner-preview": {
|
||||
"message": "Banner preview"
|
||||
},
|
||||
"project.settings.disclosures.archived.description.1": {
|
||||
"message": "Mark your project as archived to let users know that you are no longer working on it."
|
||||
},
|
||||
"project.settings.disclosures.archived.description.2": {
|
||||
"message": "Archived projects remain discoverable when their visibility is set to Public. If you wish to de-list your project, set its visibility to Unlisted."
|
||||
},
|
||||
"project.settings.disclosures.archived.note-placeholder": {
|
||||
"message": "e.g. I don't have time to maintain this project anymore, feel free to fork it!"
|
||||
},
|
||||
"project.settings.disclosures.archived.title": {
|
||||
"message": "Archive project"
|
||||
},
|
||||
"project.settings.disclosures.content-disclosures": {
|
||||
"message": "Content disclosures"
|
||||
},
|
||||
"project.settings.disclosures.derivative.description": {
|
||||
"message": "You must enable this if your project is derivative of another project, such as being a fork or containing a substantial amount of someone else’s work."
|
||||
},
|
||||
"project.settings.disclosures.derivative.link-label": {
|
||||
"message": "Link to original work"
|
||||
},
|
||||
"project.settings.disclosures.derivative.link-placeholder": {
|
||||
"message": "https://example.com"
|
||||
},
|
||||
"project.settings.disclosures.derivative.name-label": {
|
||||
"message": "Name of original work"
|
||||
},
|
||||
"project.settings.disclosures.derivative.name-placeholder": {
|
||||
"message": "Example project"
|
||||
},
|
||||
"project.settings.disclosures.derivative.note-label": {
|
||||
"message": "Explain how your project is based on the original work"
|
||||
},
|
||||
"project.settings.disclosures.derivative.title": {
|
||||
"message": "Contains derivative content"
|
||||
},
|
||||
"project.settings.disclosures.description": {
|
||||
"message": "You must add any applicable content disclosures to your project in compliance with <rules>Modrinth's Content Rules</rules>."
|
||||
},
|
||||
"project.settings.disclosures.paid-features.description": {
|
||||
"message": "You must enable this if your project contains features that can be obtained by spending real-world money."
|
||||
},
|
||||
"project.settings.disclosures.paid-features.feature-placeholder": {
|
||||
"message": "e.g. Cosmetics available as Patreon reward"
|
||||
},
|
||||
"project.settings.disclosures.paid-features.features-description": {
|
||||
"message": "List the types of paid features"
|
||||
},
|
||||
"project.settings.disclosures.paid-features.title": {
|
||||
"message": "Contains paid features"
|
||||
},
|
||||
"project.settings.disclosures.photosensitivity.description": {
|
||||
"message": "Enable this if your project contains anything that you think may be dangerous to certain people who are sensitive to flashing lights or patterns."
|
||||
},
|
||||
"project.settings.disclosures.photosensitivity.note-placeholder": {
|
||||
"message": "e.g. It adds a flashlight item that has a strobe mode. It can be disabled in Accessibility settings in-game."
|
||||
},
|
||||
"project.settings.disclosures.photosensitivity.title": {
|
||||
"message": "Photosensitivity warning"
|
||||
},
|
||||
"project.settings.disclosures.save-blocked.advertising-note": {
|
||||
"message": "Advertising disclosure requires explanation."
|
||||
},
|
||||
"project.settings.disclosures.save-blocked.derivative-empty": {
|
||||
"message": "Derivative works disclosure must list at least one source work."
|
||||
},
|
||||
"project.settings.disclosures.save-blocked.derivative-source-label": {
|
||||
"message": "Derivative work sources must have a name."
|
||||
},
|
||||
"project.settings.disclosures.save-blocked.no-permission": {
|
||||
"message": "You don't have permission to edit this project's disclosures."
|
||||
},
|
||||
"project.settings.disclosures.save-blocked.paid-features-empty": {
|
||||
"message": "Paid features disclosure must list at least one paid feature."
|
||||
},
|
||||
"project.settings.disclosures.save-blocked.photosensitivity-note": {
|
||||
"message": "Photosensitivity warning disclosure must include a description."
|
||||
},
|
||||
"project.settings.disclosures.save-blocked.system-interactions-note": {
|
||||
"message": "External system interactions disclosure must include a description."
|
||||
},
|
||||
"project.settings.disclosures.save-blocked.telemetry-empty": {
|
||||
"message": "Telemetry disclosure must list at least one type of data collected."
|
||||
},
|
||||
"project.settings.disclosures.system-interactions.description": {
|
||||
"message": "You must enable this if your project reads or edits things on the user's system outside of the game."
|
||||
},
|
||||
"project.settings.disclosures.system-interactions.note-label": {
|
||||
"message": "Describe the external system interactions"
|
||||
},
|
||||
"project.settings.disclosures.system-interactions.note-placeholder": {
|
||||
"message": "e.g. It adds a file to the desktop called wake_up.txt"
|
||||
},
|
||||
"project.settings.disclosures.system-interactions.title": {
|
||||
"message": "External system interactions"
|
||||
},
|
||||
"project.settings.disclosures.telemetry.consent-always-active": {
|
||||
"message": "Always active"
|
||||
},
|
||||
"project.settings.disclosures.telemetry.consent-description": {
|
||||
"message": "What is the consent model of your telemetry?"
|
||||
},
|
||||
"project.settings.disclosures.telemetry.consent-opt-in": {
|
||||
"message": "Opt-in"
|
||||
},
|
||||
"project.settings.disclosures.telemetry.consent-opt-out": {
|
||||
"message": "Opt-out"
|
||||
},
|
||||
"project.settings.disclosures.telemetry.data-description": {
|
||||
"message": "You can either add a privacy policy, or a list of types of data that are collected. Remember to mention if it is anonymous or contains personally identifiable information (PII)."
|
||||
},
|
||||
"project.settings.disclosures.telemetry.data-label": {
|
||||
"message": "What data is collected?"
|
||||
},
|
||||
"project.settings.disclosures.telemetry.data-placeholder": {
|
||||
"message": "e.g. Anonymous launch analytics to track Minecraft version and mod loader usage."
|
||||
},
|
||||
"project.settings.disclosures.telemetry.description": {
|
||||
"message": "You must enable this if your project sends usage data back to yourself or a third party."
|
||||
},
|
||||
"project.settings.disclosures.telemetry.title": {
|
||||
"message": "Contains telemetry"
|
||||
},
|
||||
"project.settings.editing-project": {
|
||||
"message": "Editing {projectType} project"
|
||||
},
|
||||
"project.settings.general.name.description": {
|
||||
"message": "Avoid prefixes, suffixes, parentheticals, or added descriptions—just the project's actual name."
|
||||
},
|
||||
@@ -3782,6 +3998,18 @@
|
||||
"project.settings.general.url.title": {
|
||||
"message": "URL"
|
||||
},
|
||||
"project.settings.head-title": {
|
||||
"message": "⚙️ {section} - {project}"
|
||||
},
|
||||
"project.settings.monetization.description": {
|
||||
"message": "Projects on Modrinth are automatically enrolled in the <rewards-program-link>Rewards Program</rewards-program-link>. If you don't want to (or can't for legal reasons) earn revenue from this project, you can turn it off here."
|
||||
},
|
||||
"project.settings.monetization.disabled-description": {
|
||||
"message": "This project is not eligible for monetization. If you think this is a mistake, please <contact-support-link>contact support</contact-support-link>."
|
||||
},
|
||||
"project.settings.monetization.title": {
|
||||
"message": "Monetization"
|
||||
},
|
||||
"project.settings.permissions.attention-needed.description.proj-approved": {
|
||||
"message": "Please provide proof that you have permission to redistribute all of the following files. Once completed, withheld versions will be automatically published."
|
||||
},
|
||||
@@ -3977,15 +4205,6 @@
|
||||
"project.settings.tags.upload-version-first": {
|
||||
"message": "Please upload a version first in order to select tags!"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Settings"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Visit projects dashboard"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} has been archived. {title} will not receive any further updates unless the author decides to unarchive the project."
|
||||
},
|
||||
"project.versions.copy-id-option": {
|
||||
"message": "Copy ID"
|
||||
},
|
||||
@@ -4094,6 +4313,12 @@
|
||||
"report.note.malicious.2": {
|
||||
"message": "Summaries from Microsoft Defender, VirusTotal, or AI malware detection are not sufficient forms of evidence and will not be accepted."
|
||||
},
|
||||
"report.note.missing-disclosure.1": {
|
||||
"message": "Content disclosures are a new feature we've just added. We're giving creators a grace period to get their disclosures up-to-date before we begin accepting reports for missing or incorrect disclosures."
|
||||
},
|
||||
"report.note.missing-disclosure.2": {
|
||||
"message": "Check back later once the grace period has ended. Reports of this type are not being accepted at this time."
|
||||
},
|
||||
"report.please-report": {
|
||||
"message": "Please report:"
|
||||
},
|
||||
@@ -4112,6 +4337,9 @@
|
||||
"report.report-item": {
|
||||
"message": "Report {title} to moderators"
|
||||
},
|
||||
"report.reported-for": {
|
||||
"message": "Reported for {type}"
|
||||
},
|
||||
"report.submit": {
|
||||
"message": "Submit report"
|
||||
},
|
||||
|
||||
@@ -2919,10 +2919,10 @@
|
||||
"message": "Actualizar a Modrinth+"
|
||||
},
|
||||
"layout.publish.email-verification-required.description": {
|
||||
"message": "Debes verificar tu email antes de empezar a publicar en Modrinth."
|
||||
"message": "Debes verificar tu correo electrónico antes de empezar a publicar en Modrinth."
|
||||
},
|
||||
"layout.publish.email-verification-required.title": {
|
||||
"message": "Verificación de email requerida"
|
||||
"message": "Verificación de correo electrónico requerida"
|
||||
},
|
||||
"modal.shared-instance.open-in-app.benefit.install": {
|
||||
"message": "Instala automáticamente todo lo que estén jugando"
|
||||
@@ -2937,7 +2937,7 @@
|
||||
"message": "Obtener la App de Modrinth"
|
||||
},
|
||||
"modal.shared-instance.open-in-app.managed-by": {
|
||||
"message": "Gestionado por"
|
||||
"message": "Administrado por"
|
||||
},
|
||||
"modal.shared-instance.open-in-app.opening-automatically": {
|
||||
"message": "La App de Modrinth se abrirá automáticamente..."
|
||||
@@ -3929,9 +3929,27 @@
|
||||
"project.settings.tags.featured-tags": {
|
||||
"message": "Etiquetas destacadas"
|
||||
},
|
||||
"project.settings.tags.featured-tags-required": {
|
||||
"message": "Debes seleccionar al menos una etiqueta destacada."
|
||||
},
|
||||
"project.settings.tags.featured-tags-select-description": {
|
||||
"message": "Selecciona las etiquetas más relevantes. Estas se mostrarán primero que las demás etiquetas."
|
||||
},
|
||||
"project.settings.tags.features-description": {
|
||||
"message": "Selecciona todas las características que tu {type} usa."
|
||||
},
|
||||
"project.settings.tags.group-title.categories": {
|
||||
"message": "{showType, select, yes {{types} categorías} other {Categorías}}"
|
||||
},
|
||||
"project.settings.tags.group-title.features": {
|
||||
"message": "{showType, select, yes {{types} características} other {Características}}"
|
||||
},
|
||||
"project.settings.tags.group-title.performance-impact": {
|
||||
"message": "{showType, select, yes {{types} impacto al rendimiento} other {Impacto al rendimiento}}"
|
||||
},
|
||||
"project.settings.tags.group-title.resolutions": {
|
||||
"message": "{showType, select, yes {{types} resoluciones} other {Resoluciones}}"
|
||||
},
|
||||
"project.settings.tags.multiple-resolution-tags-warning": {
|
||||
"message": "Has seleccionado {count} etiquetas de resolución ({tags}). Típicamente los paquetes de recursos solo deberían de tener una."
|
||||
},
|
||||
@@ -3959,15 +3977,6 @@
|
||||
"project.settings.tags.upload-version-first": {
|
||||
"message": "Por favor, ¡sube una versión primero para poder seleccionar etiquetas!"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Configuración"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Ver el panel de control de proyectos"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} se ha archivado. {title} no recibirá más actualizaciones hasta que el autor decida desarchivar el proyecto."
|
||||
},
|
||||
"project.versions.copy-id-option": {
|
||||
"message": "Copiar ID"
|
||||
},
|
||||
@@ -4575,10 +4584,10 @@
|
||||
"message": "Administrar claves de acceso"
|
||||
},
|
||||
"settings.account.security.passkey.description": {
|
||||
"message": "Administra tus claves de acceso registradas o agrega una nueva."
|
||||
"message": "Administra tus claves de acceso registradas o añade una nueva."
|
||||
},
|
||||
"settings.account.security.passkey.modal.added": {
|
||||
"message": "Agregado {ago}"
|
||||
"message": "Añadido {ago}"
|
||||
},
|
||||
"settings.account.security.passkey.modal.last-used": {
|
||||
"message": "Último uso {ago}"
|
||||
@@ -4629,7 +4638,7 @@
|
||||
"message": "Gestionar proveedores"
|
||||
},
|
||||
"settings.account.security.providers.description": {
|
||||
"message": "Agrega o elimina métodos de inicio de sesión de tu cuenta, incluyendo GitHub, GitLab, Microsoft, Discord, Steam y Google."
|
||||
"message": "Añade o elimina métodos de inicio de sesión de tu cuenta, incluyendo GitHub, GitLab, Microsoft, Discord, Steam y Google."
|
||||
},
|
||||
"settings.account.security.providers.title": {
|
||||
"message": "Administrar proveedores de autenticación"
|
||||
@@ -4644,7 +4653,7 @@
|
||||
"message": "Configurar verificación en dos pasos"
|
||||
},
|
||||
"settings.account.security.two-factor.description": {
|
||||
"message": "Agrega una capa adicional de seguridad a tu cuenta al iniciar sesión."
|
||||
"message": "Añade una capa adicional de seguridad a tu cuenta al iniciar sesión."
|
||||
},
|
||||
"settings.account.security.two-factor.modal.remove.header": {
|
||||
"message": "Eliminar 2FA"
|
||||
|
||||
@@ -8,6 +8,18 @@
|
||||
"admin.billing.error.not-found": {
|
||||
"message": "Usuario no encontrado"
|
||||
},
|
||||
"ads-consent.accept": {
|
||||
"message": "Aceptar todos"
|
||||
},
|
||||
"ads-consent.body": {
|
||||
"message": "Los anuncios hace Modrinth posible y financian pagos a creadores. Nuestros socios pueden almacenar o acceder cookies en el sitio para personalizar anuncios y medir el rendimiento."
|
||||
},
|
||||
"ads-consent.manage": {
|
||||
"message": "Gestionar preferencias"
|
||||
},
|
||||
"ads-consent.reject": {
|
||||
"message": "Rechazar todos"
|
||||
},
|
||||
"ads-consent.title": {
|
||||
"message": "Tu privacidad y como anuncios soportan Modrinth"
|
||||
},
|
||||
@@ -3329,15 +3341,6 @@
|
||||
"project.settings.permissions.sort.status": {
|
||||
"message": "Estado"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Ajustes"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Visita el panel de proyectos"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} ha sido archivado. {title} no recibirá ninguna futura actualización excepto que el autor decida desarchivar el proyecto."
|
||||
},
|
||||
"project.versions.title": {
|
||||
"message": "Versiones"
|
||||
},
|
||||
|
||||
@@ -980,9 +980,6 @@
|
||||
"project.settings.general.url.title": {
|
||||
"message": "URL"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Asetukset"
|
||||
},
|
||||
"project.versions.title": {
|
||||
"message": "Versiot"
|
||||
},
|
||||
|
||||
@@ -2411,15 +2411,6 @@
|
||||
"project.settings.permissions.sort.status": {
|
||||
"message": "Estado"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Mga Setting"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Bisitahin ang dashboard ng mga proyekto"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "Inarkibo ang {title}. Ang {title} ay hindi na tatanggap ng mga update maliban kung iwawala nila ang pagkaarkibo ng proyekto."
|
||||
},
|
||||
"project.versions.title": {
|
||||
"message": "Mga bersiyon"
|
||||
},
|
||||
|
||||
@@ -234,7 +234,7 @@
|
||||
"message": "Modrinth App"
|
||||
},
|
||||
"analytics.download-source.website": {
|
||||
"message": "Site web de Modrinth"
|
||||
"message": "Site web Modrinth"
|
||||
},
|
||||
"analytics.downloads.suffix": {
|
||||
"message": "téléchargements"
|
||||
@@ -1080,10 +1080,10 @@
|
||||
"message": "Ce fil est fermé et aucun message ne peut y être envoyé."
|
||||
},
|
||||
"conversation-thread.error.closing-report": {
|
||||
"message": "Impossible de fermer le rapport"
|
||||
"message": "Erreur lors de la fermeture du signalement"
|
||||
},
|
||||
"conversation-thread.error.reopening-report": {
|
||||
"message": "Impossible de rouvrir le rapport"
|
||||
"message": "Erreur lors de la réouverture du signalement"
|
||||
},
|
||||
"conversation-thread.error.sending-message": {
|
||||
"message": "Impossible d'envoyer le message"
|
||||
@@ -2676,7 +2676,7 @@
|
||||
"message": "Publier"
|
||||
},
|
||||
"layout.action.reports": {
|
||||
"message": "Rapports d'examen"
|
||||
"message": "Examiner les signalements"
|
||||
},
|
||||
"layout.action.review-projects": {
|
||||
"message": "Revue de projet"
|
||||
@@ -2874,7 +2874,7 @@
|
||||
"message": "Ouvrir le menu"
|
||||
},
|
||||
"layout.nav.active-reports": {
|
||||
"message": "Rapports actifs"
|
||||
"message": "Signalements actifs"
|
||||
},
|
||||
"layout.nav.discover": {
|
||||
"message": "Découvrir"
|
||||
@@ -3929,9 +3929,27 @@
|
||||
"project.settings.tags.featured-tags": {
|
||||
"message": "Tags mis en avant"
|
||||
},
|
||||
"project.settings.tags.featured-tags-required": {
|
||||
"message": "Vous devez au moins avoir un tag mis en avant."
|
||||
},
|
||||
"project.settings.tags.featured-tags-select-description": {
|
||||
"message": "Sélectionnez vos tags les plus pertinents. Ils sont affichés avant le reste de vos tags."
|
||||
},
|
||||
"project.settings.tags.features-description": {
|
||||
"message": "Sélectionnez toutes les fonctionnalités que votre {type} utilise."
|
||||
},
|
||||
"project.settings.tags.group-title.categories": {
|
||||
"message": "{showType, select, yes {{types} catégories} other {Catégories}}"
|
||||
},
|
||||
"project.settings.tags.group-title.features": {
|
||||
"message": "{showType, select, yes {{types} fonctionnalités} other {Fonctionnalités}}"
|
||||
},
|
||||
"project.settings.tags.group-title.performance-impact": {
|
||||
"message": "{showType, select, yes {{types} impact sur les performances} other {Impact sur les performances}}"
|
||||
},
|
||||
"project.settings.tags.group-title.resolutions": {
|
||||
"message": "{showType, select, yes {{types} résolutions} other {Résolutions}}"
|
||||
},
|
||||
"project.settings.tags.multiple-resolution-tags-warning": {
|
||||
"message": "Vous avez sélectionné {count} tags de résolution ({tags}). Les packs de ressources ne devraient typiquement avoir qu'un seul tag de résolution."
|
||||
},
|
||||
@@ -3959,15 +3977,6 @@
|
||||
"project.settings.tags.upload-version-first": {
|
||||
"message": "Merci d'upload une version en premier afin de pouvoir sélectionner des tags !"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Paramètres"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Visiter le tableau de contrôle des projets"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} a été archivé. {title} ne recevra plus de mises à jour jusqu'à ce que l'auteur du projet décide de désarchiver le projet."
|
||||
},
|
||||
"project.versions.copy-id-option": {
|
||||
"message": "Copier l'ID"
|
||||
},
|
||||
|
||||
@@ -17,6 +17,9 @@
|
||||
"analytics.breakdown.project": {
|
||||
"message": "פּרוֹיֶקט"
|
||||
},
|
||||
"analytics.chart.axis.playtime-hours": {
|
||||
"message": "{hours} שעות"
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.description": {
|
||||
"message": "רק צפיות והורדות שבוצעו דרך Modrinth נספרות לצורך מונטיזציה, והורדות מחייבות את המשתמשים להיות מחוברים לחשבונם."
|
||||
},
|
||||
@@ -2021,15 +2024,6 @@
|
||||
"project.settings.general.url.title": {
|
||||
"message": "URL"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "הגדרות"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "ללוח הבקרה של הפרויקטים"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "הפרויקט {title} הועבר לארכיון. {title} לא יקבל עדכונים נוספים, אלא אם המחבר יחליט להוציא את הפרויקט מהארכיון."
|
||||
},
|
||||
"project.versions.title": {
|
||||
"message": "גרסאות"
|
||||
},
|
||||
|
||||
@@ -177,14 +177,17 @@
|
||||
"message": "{count} nap"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.hours": {
|
||||
"message": "{count} óra"
|
||||
"message": "{count, plural, one {#óra} other {# órák}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.minutes": {
|
||||
"message": "{count} perc"
|
||||
"message": "{count, plural, one {# perc} other {# percek}}"
|
||||
},
|
||||
"analytics.chart.tooltip.hide-entry": {
|
||||
"message": "{name} elrejtése a grafikonon"
|
||||
},
|
||||
"analytics.chart.tooltip.no-data": {
|
||||
"message": "Nincs adat"
|
||||
},
|
||||
"analytics.chart.tooltip.pinned": {
|
||||
"message": "A diagram eszköztippje kitűzve"
|
||||
},
|
||||
@@ -426,7 +429,7 @@
|
||||
"message": "az elő. idősz. kép."
|
||||
},
|
||||
"analytics.stat.previous-period-comparison-short": {
|
||||
"message": "az előzőhöz képest"
|
||||
"message": "az elő. kép."
|
||||
},
|
||||
"analytics.stat.revenue": {
|
||||
"message": "Bevétel"
|
||||
@@ -3089,6 +3092,15 @@
|
||||
"organization.label.downloads": {
|
||||
"message": "letöltés"
|
||||
},
|
||||
"organization.project-transfer.id-column": {
|
||||
"message": "Azonosító"
|
||||
},
|
||||
"organization.project-transfer.name-column": {
|
||||
"message": "Név"
|
||||
},
|
||||
"organization.project-transfer.project-icon-alt": {
|
||||
"message": "A(z) {name} ikonja"
|
||||
},
|
||||
"organization.projects.none-with-create-prompt": {
|
||||
"message": "Ennek a szervezetnek még nincsenek projektjei. Szeretnél <create-link>létrehozni egyet</create-link>?"
|
||||
},
|
||||
@@ -3671,15 +3683,6 @@
|
||||
"project.settings.tags.upload-version-first": {
|
||||
"message": "A címkék kiválasztásához előbb tölts fel egy verziót!"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Beállítások"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Projektek irányítópult megnyitása"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "A(z) {title} archiválásra került. A(z) {title} nem kap további frissítéseket, kivéve, ha a fejlesztő úgy dönt, hogy visszavonja a projekt archiválását."
|
||||
},
|
||||
"project.versions.copy-id-option": {
|
||||
"message": "Azonosító másolása"
|
||||
},
|
||||
|
||||
@@ -2414,15 +2414,6 @@
|
||||
"project.settings.general.url.title": {
|
||||
"message": "URL"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Pengaturan"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Kunjungi dasbor proyek"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} telah diarsip. {title} tidak akan menerima pembaruan di masa mendatang kecuali pembuat memutuskan untuk membuka arsip proyek ini."
|
||||
},
|
||||
"project.versions.title": {
|
||||
"message": "Versi"
|
||||
},
|
||||
|
||||
@@ -972,7 +972,7 @@
|
||||
"message": "Smetti di seguire il progetto"
|
||||
},
|
||||
"collection.delete-modal.description": {
|
||||
"message": "Questa raccolta sarà rimossa per sempre. Quest'azione non può essere annullata."
|
||||
"message": "La raccolta sarà eliminata per sempre. Questa azione è irreversibile."
|
||||
},
|
||||
"collection.delete-modal.title": {
|
||||
"message": "Vuoi davvero eliminare questa raccolta?"
|
||||
@@ -2967,7 +2967,7 @@
|
||||
"message": "Ammontare"
|
||||
},
|
||||
"modpack-scan-modal.delete-all-groups-confirmation.description": {
|
||||
"message": "Questi gruppi di attribuzione e i file all'interno saranno rimossi per sempre da questo progetto. Quest'azione non può essere annullata."
|
||||
"message": "Tutti i gruppi di attribuzione del progetto e i loro contenuti saranno eliminati per sempre. Questa azione è irreversibile."
|
||||
},
|
||||
"modpack-scan-modal.delete-all-groups.error": {
|
||||
"message": "Errore nell'eliminazione dei gruppi: {error}"
|
||||
@@ -3801,7 +3801,7 @@
|
||||
"message": "Elimina tutti i gruppi"
|
||||
},
|
||||
"project.settings.permissions.delete-all-groups-confirmation.description": {
|
||||
"message": "{count, plural, one {Questo gruppo di attribuzione} other {Questi # gruppi di attribuzione}} e i file all'interno saranno rimossi per sempre da questo progetto. Quest'azione non può essere annullata."
|
||||
"message": "{count, plural, one {Il gruppo di attribuzione del progetto e i suoi} other {# gruppi di attribuzione del progetto e i loro}} contenuti saranno eliminati per sempre. Questa azione è irreversibile."
|
||||
},
|
||||
"project.settings.permissions.delete-all-groups-confirmation.title": {
|
||||
"message": "Eliminare tutti i gruppi di attribuzione?"
|
||||
@@ -3917,6 +3917,24 @@
|
||||
"project.settings.tags.featured-tags": {
|
||||
"message": "Tag in evidenza"
|
||||
},
|
||||
"project.settings.tags.featured-tags-required": {
|
||||
"message": "Devi avere almeno un tag in evidenza."
|
||||
},
|
||||
"project.settings.tags.featured-tags-select-description": {
|
||||
"message": "Seleziona i tag più pertinenti. Questi sono mostrati prima degli altri tag."
|
||||
},
|
||||
"project.settings.tags.group-title.categories": {
|
||||
"message": "{showType, select, yes {{types}: categorie} other {Categorie}}"
|
||||
},
|
||||
"project.settings.tags.group-title.features": {
|
||||
"message": "{showType, select, yes {{types}: caratteristiche} other {Caratteristiche}}"
|
||||
},
|
||||
"project.settings.tags.group-title.performance-impact": {
|
||||
"message": "{showType, select, yes {{types}: impatto} other {Impatto}}"
|
||||
},
|
||||
"project.settings.tags.group-title.resolutions": {
|
||||
"message": "{showType, select, yes {{types}: risoluzioni} other {Risoluzioni}}"
|
||||
},
|
||||
"project.settings.tags.multiple-resolution-tags-warning": {
|
||||
"message": "Hai selezionato {count} tag di risoluzione ({tags}). I pacchetti di risorse dovrebbero averne solo uno."
|
||||
},
|
||||
@@ -3938,15 +3956,6 @@
|
||||
"project.settings.tags.upload-version-first": {
|
||||
"message": "Carica una vesione prima di selezionare i tag!"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Impostazioni"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Visita bacheca del progetto"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} è stato archiviato. {title} non riceverà più aggiornamenti a meno che l'autore decida di rimuoverlo dall'archivio."
|
||||
},
|
||||
"project.versions.copy-id-option": {
|
||||
"message": "Copia ID"
|
||||
},
|
||||
@@ -5190,7 +5199,7 @@
|
||||
"message": "Tutte le versioni"
|
||||
},
|
||||
"version.confirm-delete.description": {
|
||||
"message": "Questa versione verrà eliminata permanentemente. Questa azione non può essere annullata."
|
||||
"message": "La versione sarà eliminata per sempre. Questa azione è irreversibile."
|
||||
},
|
||||
"version.confirm-delete.proceed": {
|
||||
"message": "Elimina versione"
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
"analytics.breakdown.country": {
|
||||
"message": "国 / 地域"
|
||||
},
|
||||
"analytics.breakdown.dependent-on": {
|
||||
"message": "次に依存"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-download": {
|
||||
"message": "依存プロジェクト"
|
||||
},
|
||||
@@ -131,6 +134,18 @@
|
||||
"analytics.chart.empty.select-table-items": {
|
||||
"message": "以下の表から項目を選択して、データを可視化してください。"
|
||||
},
|
||||
"analytics.chart.events.count-aria": {
|
||||
"message": "{count, plural, one {# 件のイベント} other {# 件のイベント}}"
|
||||
},
|
||||
"analytics.chart.events.see-announcement": {
|
||||
"message": "お知らせを見る"
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.aria": {
|
||||
"message": "収益に関する分析の詳細を表示"
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.description": {
|
||||
"message": "収益化に向けてModrinthを介して行われたビューとダウンロードのみが表示され、ダウンロードにはログインが必要です。"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "テーブル内の{itemType, select, project {{count, plural, other {プロジェクト}}} country {{count, plural, other {国}}} monetization {{count, plural, other {収益}}} downloadSource {{count, plural, other {ダウンロード元}}} downloadReason {{count, plural, other {ダウンロード理由}}} member {{count, plural, other {メンバー}}} projectVersion {{count, plural, other {プロジェクトバージョン}}} loader {{count, plural, other {ローダー}}} gameVersion {{count, plural, other {ゲームバージョン}}} other {{count, plural, other {項目}}}}上位 {count} 件を表示"
|
||||
},
|
||||
@@ -140,6 +155,12 @@
|
||||
"analytics.chart.tooltip.dependent-project-version": {
|
||||
"message": "{dependentProject} は {dependencyProject} の {version} に依存しています"
|
||||
},
|
||||
"analytics.chart.tooltip.no-data": {
|
||||
"message": "データなし"
|
||||
},
|
||||
"analytics.chart.tooltip.pinned-aria": {
|
||||
"message": "ピン留め"
|
||||
},
|
||||
"analytics.chart.tooltip.total": {
|
||||
"message": "合計"
|
||||
},
|
||||
@@ -269,9 +290,27 @@
|
||||
"analytics.project-event.project-approved": {
|
||||
"message": "承認済み"
|
||||
},
|
||||
"analytics.project-event.project-private": {
|
||||
"message": "プロジェクトを非公開に設定"
|
||||
},
|
||||
"analytics.project-event.project-status-changed": {
|
||||
"message": "プロジェクトの状態が変更"
|
||||
},
|
||||
"analytics.project-event.project-unlisted": {
|
||||
"message": "プロジェクトはリストにありません"
|
||||
},
|
||||
"analytics.project-event.version-released": {
|
||||
"message": "{version} がリリースされました"
|
||||
},
|
||||
"analytics.project-event.version-uploaded": {
|
||||
"message": "バージョンがアップロードされました"
|
||||
},
|
||||
"analytics.project-status.approved": {
|
||||
"message": "承認済み"
|
||||
},
|
||||
"analytics.project-status.archived": {
|
||||
"message": "アーカイブ済み"
|
||||
},
|
||||
"analytics.project-status.draft": {
|
||||
"message": "ドラフト"
|
||||
},
|
||||
@@ -281,6 +320,9 @@
|
||||
"analytics.project-status.private": {
|
||||
"message": "非公開"
|
||||
},
|
||||
"analytics.project-status.rejected": {
|
||||
"message": "却下"
|
||||
},
|
||||
"analytics.project-status.unlisted": {
|
||||
"message": "限定公開"
|
||||
},
|
||||
@@ -741,7 +783,7 @@
|
||||
"message": "アカウント設定"
|
||||
},
|
||||
"auth.verify-email.action.discover-mods": {
|
||||
"message": "早速Modを探す"
|
||||
"message": "Modを探す"
|
||||
},
|
||||
"auth.verify-email.already-verified.description": {
|
||||
"message": "メールアドレスはすでに承認されています!"
|
||||
@@ -2022,7 +2064,7 @@
|
||||
"message": "プランを選択"
|
||||
},
|
||||
"landing.button.discover-mods": {
|
||||
"message": "Modを探索する"
|
||||
"message": "Modを探す"
|
||||
},
|
||||
"landing.button.go-to-dashboard": {
|
||||
"message": "ダッシュボードへ移動"
|
||||
@@ -2043,7 +2085,7 @@
|
||||
"message": "検索結果やホームページ、Discordサーバー、そして今後追加される様々なルートを通じて、数千人ものユーザーにあなたのプロジェクトを見つけてもらいましょう!"
|
||||
},
|
||||
"landing.creator.feature.discovery.title": {
|
||||
"message": "探索"
|
||||
"message": "発見"
|
||||
},
|
||||
"landing.creator.feature.diverse-ecosystem.description": {
|
||||
"message": "Minotaurを使ってビルドツールと連携すれば、新バージョンのリリースと同時に自動アップロードが可能です。"
|
||||
@@ -2933,6 +2975,27 @@
|
||||
"project.moderation.admonition.draft.header": {
|
||||
"message": "ドラフト"
|
||||
},
|
||||
"project.moderation.admonition.under-review.body.1": {
|
||||
"message": "あなたのプロジェクトはモデレーターによる審査待ちとなっております。"
|
||||
},
|
||||
"project.moderation.admonition.under-review.body.2": {
|
||||
"message": "あなたのプロジェクトはスキャンされ、その後、人間のモデレーターによって審査され、Modrinth の <rules-link>コンテンツルール</rules-link> および <terms-link>利用規約</terms-link> に準拠しているかどうかが確認されます。"
|
||||
},
|
||||
"project.moderation.admonition.under-review.body.3": {
|
||||
"message": "審査を待っている間もプロジェクトを編集することができます。編集をしても審査の順番が変わるわけではございません。"
|
||||
},
|
||||
"project.moderation.admonition.under-review.body.4": {
|
||||
"message": "提出されたプロジェクトは24~48時間以内に審査することを目指していますが、プロジェクトによっては遅れが発生してしまう場合があります。プロジェクトに問題があることを意味するというわけではありません。"
|
||||
},
|
||||
"project.moderation.admonition.under-review.body.4.alt-week": {
|
||||
"message": "プロジェクトの審査は1週間以内に行うことを目標としていますが遅れが発生してしまう場合がございます。プロジェクトに問題があることを意味するというわけではありません。"
|
||||
},
|
||||
"project.moderation.admonition.under-review.body.5": {
|
||||
"message": "<emphasis>モデレーターがModrinthの安全を守るために尽くしております。ご協力お願いします。皆様のプロジェクト審査をサポートできることを楽しみにしております💚</emphasis>"
|
||||
},
|
||||
"project.moderation.admonition.under-review.header": {
|
||||
"message": "プロジェクトは審査中です"
|
||||
},
|
||||
"project.moderation.title": {
|
||||
"message": "管理"
|
||||
},
|
||||
@@ -3002,15 +3065,6 @@
|
||||
"project.settings.permissions.sort.status": {
|
||||
"message": "ステータス"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "設定"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "プロジェクトダッシュボードを見る"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} はアーカイブされました。作者がプロジェクトのアーカイブを解除しない限り、今後 {title} に更新はありません。"
|
||||
},
|
||||
"project.versions.title": {
|
||||
"message": "バージョン"
|
||||
},
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user