mirror of
https://github.com/modrinth/code.git
synced 2026-08-01 05:36:39 +00:00
Compare commits
26
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6257940747 | ||
|
|
47c60788ff | ||
|
|
d1e8a9c574 | ||
|
|
7bf85239de | ||
|
|
6380dd16d5 | ||
|
|
2376d571bb | ||
|
|
e7926083fb | ||
|
|
a686a93858 | ||
|
|
2876890fe5 | ||
|
|
4c869d2a37 | ||
|
|
525f60c389 | ||
|
|
042a27a17c | ||
|
|
a747c2f290 | ||
|
|
d756e5ab93 | ||
|
|
1f8b1bd2bb | ||
|
|
23edb2351d | ||
|
|
2c53e1240e | ||
|
|
b7d097d74d | ||
|
|
0a0ef1ce81 | ||
|
|
d7917048d5 | ||
|
|
a0017cf58f | ||
|
|
b188bbf617 | ||
|
|
79ce1adf9d | ||
|
|
c6ef10e798 | ||
|
|
be65589e4d | ||
|
|
86a224419c |
@@ -20,7 +20,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||
- uses: taiki-e/install-action@b5fddbb5361bce8a06fb168c9d403a6cc552b084 # v2.75.29
|
||||
- uses: taiki-e/install-action@fd2f5e3d644b484055ebf4268f474c565f148f25 # v2.81.9
|
||||
with:
|
||||
tool: tombi
|
||||
- run: tombi lint
|
||||
|
||||
@@ -20,6 +20,14 @@ on:
|
||||
required: true
|
||||
type: string
|
||||
description: 'The environment to deploy to (staging-preview or production-preview)'
|
||||
head_sha:
|
||||
required: false
|
||||
type: string
|
||||
description: 'The commit SHA to deploy (defaults to github.sha)'
|
||||
head_ref:
|
||||
required: false
|
||||
type: string
|
||||
description: 'The branch name to deploy (defaults to github.ref_name)'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.environment || 'push' }}
|
||||
@@ -40,12 +48,14 @@ jobs:
|
||||
|
||||
- name: Configure environment
|
||||
id: meta
|
||||
env:
|
||||
ENV_INPUT: ${{ inputs.environment }}
|
||||
REF: ${{ github.ref }}
|
||||
DEPLOY_SHA: ${{ inputs.head_sha || github.sha }}
|
||||
run: |
|
||||
echo "cmd=deploy" >> $GITHUB_OUTPUT
|
||||
|
||||
ENV_INPUT="${{ inputs.environment }}"
|
||||
REF="${{ github.ref }}"
|
||||
SHA_SHORT="${GITHUB_SHA::8}"
|
||||
SHA_SHORT="${DEPLOY_SHA::8}"
|
||||
|
||||
if [ "$ENV_INPUT" = "staging-preview" ]; then
|
||||
echo "env=staging" >> $GITHUB_OUTPUT
|
||||
@@ -106,8 +116,8 @@ jobs:
|
||||
working-directory: ./apps/frontend
|
||||
run: pnpm build
|
||||
env:
|
||||
CF_PAGES_BRANCH: ${{ github.ref_name }}
|
||||
CF_PAGES_COMMIT_SHA: ${{ github.sha }}
|
||||
CF_PAGES_BRANCH: ${{ inputs.head_ref || github.ref_name }}
|
||||
CF_PAGES_COMMIT_SHA: ${{ inputs.head_sha || github.sha }}
|
||||
CF_PAGES_URL: ${{ steps.meta.outputs.url }}
|
||||
BUILD_ENV: ${{ steps.meta.outputs.env }}
|
||||
PREVIEW: ${{ inputs.environment != '' && 'true' || 'false' }}
|
||||
|
||||
@@ -24,6 +24,8 @@ jobs:
|
||||
environment: [staging-preview, production-preview]
|
||||
with:
|
||||
environment: ${{ matrix.environment }}
|
||||
head_sha: ${{ github.event.pull_request.head.sha }}
|
||||
head_ref: ${{ github.event.pull_request.head.ref }}
|
||||
|
||||
deploy-storybook:
|
||||
if: github.repository_owner == 'modrinth' && github.event.pull_request.head.repo.full_name == github.repository
|
||||
@@ -68,7 +70,9 @@ jobs:
|
||||
|
||||
- name: Configure short SHA
|
||||
id: meta
|
||||
run: echo "sha_short=${GITHUB_SHA::8}" >> $GITHUB_OUTPUT
|
||||
env:
|
||||
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
|
||||
run: echo "sha_short=${HEAD_SHA::8}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Deploy Storybook preview
|
||||
uses: cloudflare/wrangler-action@9acf94ace14e7dc412b076f2c5c20b8ce93c79cd # v3.15.0
|
||||
@@ -93,6 +97,8 @@ jobs:
|
||||
|
||||
- name: Read deployment URLs
|
||||
id: urls
|
||||
env:
|
||||
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
|
||||
run: |
|
||||
STAGING_PREVIEW_URL=$(cat deployment-url-staging-preview.txt)
|
||||
PRODUCTION_PREVIEW_URL=$(cat deployment-url-production-preview.txt)
|
||||
@@ -102,7 +108,7 @@ jobs:
|
||||
|
||||
echo "staging-preview-url=$STAGING_PREVIEW_URL" >> $GITHUB_OUTPUT
|
||||
echo "production-preview-url=$PRODUCTION_PREVIEW_URL" >> $GITHUB_OUTPUT
|
||||
echo "storybook-preview-url=https://git-${GITHUB_SHA::8}-storybook.modrinth.workers.dev" >> $GITHUB_OUTPUT
|
||||
echo "storybook-preview-url=https://git-${HEAD_SHA::8}-storybook.modrinth.workers.dev" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Find comment
|
||||
if: github.event_name == 'pull_request'
|
||||
@@ -123,7 +129,7 @@ jobs:
|
||||
body: |
|
||||
## Frontend previews
|
||||
|
||||
Last deployed commit is [${{ github.sha }}](${{ github.event.pull_request.head.repo.html_url }}/commit/${{ github.sha }})
|
||||
Last deployed commit is [${{ github.event.pull_request.head.sha }}](${{ github.event.pull_request.head.repo.html_url }}/commit/${{ github.event.pull_request.head.sha }})
|
||||
|
||||
| Environment | URL |
|
||||
|-------------|-----|
|
||||
|
||||
@@ -99,6 +99,12 @@ jobs:
|
||||
- name: Setup mold
|
||||
uses: rui314/setup-mold@9c9c13bf4c3f1adef0cc596abc155580bcb04444 # v1 / Mold 2.41.0
|
||||
|
||||
- name: Install build dependencies
|
||||
uses: awalsh128/cache-apt-pkgs-action@acb598e5ddbc6f68a970c5da0688d2f3a9f04d05 # v1.6.0
|
||||
with:
|
||||
packages: cmake libcurl4-openssl-dev
|
||||
version: v2 # cache key
|
||||
|
||||
- name: Cache Cargo registry and index
|
||||
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
|
||||
with:
|
||||
|
||||
@@ -99,8 +99,8 @@ jobs:
|
||||
- name: Install build dependencies
|
||||
uses: awalsh128/cache-apt-pkgs-action@acb598e5ddbc6f68a970c5da0688d2f3a9f04d05 # v1.6.0
|
||||
with:
|
||||
packages: libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev
|
||||
version: v1 # cache key
|
||||
packages: cmake libcurl4-openssl-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev
|
||||
version: v2 # cache key
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||
@@ -153,7 +153,7 @@ jobs:
|
||||
uses: cargo-bins/cargo-binstall@dc19f1e48450eefe5a29b8da6c6b00a87d730b37 # v1.18.1
|
||||
|
||||
- name: Setup nextest
|
||||
run: cargo binstall --no-confirm --secure cargo-nextest@0.9.133
|
||||
run: cargo binstall --no-confirm --secure --locked cargo-nextest@0.9.133
|
||||
|
||||
# cargo-binstall does not have pre-built binaries for sqlx-cli, so we fall
|
||||
# back to a cached cargo install
|
||||
|
||||
Generated
+45
-1
@@ -4817,7 +4817,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5"
|
||||
dependencies = [
|
||||
"equivalent",
|
||||
"hashbrown 0.15.5",
|
||||
"hashbrown 0.16.0",
|
||||
"serde",
|
||||
"serde_core",
|
||||
]
|
||||
@@ -5277,6 +5277,7 @@ dependencies = [
|
||||
"quick-xml 0.38.3",
|
||||
"rand 0.8.5",
|
||||
"rand_chacha 0.3.1",
|
||||
"rdkafka",
|
||||
"redis",
|
||||
"regex",
|
||||
"reqwest 0.12.24",
|
||||
@@ -5489,6 +5490,18 @@ dependencies = [
|
||||
"zlib-rs",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libz-sys"
|
||||
version = "1.1.29"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "85bc9657773828b90eeb625adff10eeac83cc21bbfd8e23a03eaa8a33c9e28d9"
|
||||
dependencies = [
|
||||
"cc",
|
||||
"libc",
|
||||
"pkg-config",
|
||||
"vcpkg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "linked-hash-map"
|
||||
version = "0.5.6"
|
||||
@@ -7967,6 +7980,37 @@ dependencies = [
|
||||
"crossbeam-utils",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rdkafka"
|
||||
version = "0.36.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1beea247b9a7600a81d4cc33f659ce1a77e1988323d7d2809c7ed1c21f4c316d"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-util",
|
||||
"libc",
|
||||
"log",
|
||||
"rdkafka-sys",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"serde_json",
|
||||
"slab",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rdkafka-sys"
|
||||
version = "4.10.0+2.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e234cf318915c1059d4921ef7f75616b5219b10b46e9f3a511a15eb4b56a3f77"
|
||||
dependencies = [
|
||||
"cmake",
|
||||
"libc",
|
||||
"libz-sys",
|
||||
"num_enum",
|
||||
"pkg-config",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "redis"
|
||||
version = "0.32.7"
|
||||
|
||||
@@ -140,6 +140,7 @@ quick-xml = "0.38.3"
|
||||
quote = { version = "1.0" }
|
||||
rand = "=0.8.5" # Locked on 0.8 until argon2 and p256 update to 0.9
|
||||
rand_chacha = "=0.3.1" # Locked on 0.3 until we can update rand to 0.9
|
||||
rdkafka = { version = "0.36.2", features = ["cmake-build"] }
|
||||
redis = "0.32.7"
|
||||
regex = "1.12.2"
|
||||
reqwest = { version = "0.12.24", default-features = false }
|
||||
@@ -269,6 +270,7 @@ redundant_type_annotations = "warn"
|
||||
result_large_err = "allow"
|
||||
todo = "warn"
|
||||
too_many_arguments = "allow"
|
||||
type_complexity = "allow"
|
||||
uninlined_format_args = "warn"
|
||||
unnested_or_patterns = "warn"
|
||||
wildcard_dependencies = "warn"
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
"message": "Stahování aktualizace"
|
||||
},
|
||||
"app.action-bar.downloads": {
|
||||
"message": "Stažené Soubory"
|
||||
"message": "Stahování"
|
||||
},
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "Skrýt více spuštěných instancí"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "Použít jako primární instanci"
|
||||
"message": "Nastavit jako primární instanci"
|
||||
},
|
||||
"app.action-bar.no-instances-running": {
|
||||
"message": "Žádné spuštěné instance"
|
||||
@@ -24,13 +24,13 @@
|
||||
"message": "Primární instance"
|
||||
},
|
||||
"app.action-bar.reload-to-update": {
|
||||
"message": "Obnovit pro aktualizaci"
|
||||
"message": "Znovu načíst pro aktualizaci"
|
||||
},
|
||||
"app.action-bar.show-more-running-instances": {
|
||||
"message": "Zobrazit další spuštěné instance"
|
||||
},
|
||||
"app.action-bar.stop-instance": {
|
||||
"message": "Ukončit instanci"
|
||||
"message": "Zastavit instanci"
|
||||
},
|
||||
"app.action-bar.update": {
|
||||
"message": "Aktualizace"
|
||||
@@ -42,10 +42,10 @@
|
||||
"message": "Zobrazit instanci"
|
||||
},
|
||||
"app.action-bar.view-logs": {
|
||||
"message": "Zobrazit záznamy"
|
||||
"message": "Zobrazit logy"
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.description": {
|
||||
"message": "Umožňuje pokročilé vykreslování, jako jsou efekty rozostření, které mohou způsobit problémy s výkonem bez hardwarového vykreslení."
|
||||
"message": "Povolí pokročilé vykreslování, například efekty rozmazání, které mohou bez hardwarového zrychlení způsobovat problémy s výkonem."
|
||||
},
|
||||
"app.appearance-settings.advanced-rendering.title": {
|
||||
"message": "Pokročilé vykreslování"
|
||||
@@ -57,16 +57,16 @@
|
||||
"message": "Barevný motiv"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Změňte stránku, na které se spouštěč otevře."
|
||||
"message": "Změňte stránku, která se otevře po spuštění launcheru."
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.home": {
|
||||
"message": "Domov"
|
||||
"message": "Domů"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.library": {
|
||||
"message": "Knihovna"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.title": {
|
||||
"message": "Výchozí úvodní stránka"
|
||||
"message": "Výchozí stránka po spuštění"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "Zakáže zobrazení jmenovky nad vaší postavou na stránce skinů."
|
||||
@@ -75,31 +75,34 @@
|
||||
"message": "Skrýt jmenovku"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "V sekci „Vrátit se do hry“ na úvodní stránce jsou uvedeny nejnovější světy."
|
||||
"message": "Zahrne nedávné světy do sekce „Vrátit se do hry“ na domovské stránce."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Skočit zpět do světů"
|
||||
"message": "Rychlý návrat do světů"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Minimalizovat spouštěč při spuštění procesu Minecraftu."
|
||||
"message": "Minimalizovat launcher při spuštění Minecraftu."
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Minimalizovat spouštěč"
|
||||
"message": "Minimalizovat launcher"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "Použít systémový rámeček okna (vyžaduje restart aplikace)."
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "Nativní dekorace"
|
||||
"message": "Systémové dekorace"
|
||||
},
|
||||
"app.appearance-settings.select-option": {
|
||||
"message": "Vyberte možnost"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Zobrazuje, kolik času jsi strávil hraním instance."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Ukázat herní čas"
|
||||
"message": "Zobrazit odehraný čas"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Umožňí přepínat zobrazení postranního panelu."
|
||||
"message": "Umožní přepínat zobrazení postranního panelu."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Přepnout postranní panel"
|
||||
@@ -111,19 +114,19 @@
|
||||
"message": "Upozorni mě před instalací neznámých modpacků"
|
||||
},
|
||||
"app.auth-servers.unreachable.body": {
|
||||
"message": "Autořizační servery Minecraftu aktuálně nejsou k dispozici. Zkontrolujte si své připojení k internetu a zkuste to znovu později."
|
||||
"message": "Ověřovací Minecraft servery mohou být právě teď nedostupné. Zkontroluj si své připojení k internetu a zkus to znovu později."
|
||||
},
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Připojení k autorizačním serverům se nezdařilo"
|
||||
"message": "Nelze se připojit k ověřovacím serverům"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "Přidat server do instance"
|
||||
"message": "Přidání serveru do instance"
|
||||
},
|
||||
"app.browse.add-to-an-instance": {
|
||||
"message": "Přidat do instalace"
|
||||
"message": "Přidat do instance"
|
||||
},
|
||||
"app.browse.add-to-instance": {
|
||||
"message": "Přidat do instalace"
|
||||
"message": "Přidat do instance"
|
||||
},
|
||||
"app.browse.add-to-instance-name": {
|
||||
"message": "Přidat do {instanceName}"
|
||||
@@ -132,22 +135,22 @@
|
||||
"message": "Přidáno"
|
||||
},
|
||||
"app.browse.already-added": {
|
||||
"message": "Už přidáno"
|
||||
"message": "Již přidáno"
|
||||
},
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "Zpět k instanci"
|
||||
},
|
||||
"app.browse.discover-content": {
|
||||
"message": "Prozkoumat obsah"
|
||||
"message": "Objevovat obsah"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Prozkoumat servery"
|
||||
"message": "Objevovat servery"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Skrýt již přidané servery"
|
||||
},
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "Balíčky Modifikací"
|
||||
"message": "Modpacky"
|
||||
},
|
||||
"app.browse.server-instance-content-warning": {
|
||||
"message": "Přidání obsahu může narušit kompatibilitu při připojení k serveru. Veškerý přidaný obsah se navíc ztratí při aktualizaci obsahu instance serveru."
|
||||
@@ -155,6 +158,9 @@
|
||||
"app.browse.server.installing": {
|
||||
"message": "Instalování"
|
||||
},
|
||||
"app.content-install.no-compatible-versions": {
|
||||
"message": "Žádná dostupná verze se neshoduje s verzí {compatibilityLabel}. Vyber verzi, abys ji i přesto nainstaloval/a. Závislosti nebudou automaticky nainstalovány."
|
||||
},
|
||||
"app.creation-modal.installing-modpack.description": {
|
||||
"message": "{fileName}"
|
||||
},
|
||||
@@ -162,7 +168,7 @@
|
||||
"message": "Probíhá instalace modpacku..."
|
||||
},
|
||||
"app.export-modal.description-placeholder": {
|
||||
"message": "Přidej popis modpacku..."
|
||||
"message": "Zadej popis modpacku..."
|
||||
},
|
||||
"app.export-modal.export-button": {
|
||||
"message": "Exportovat"
|
||||
@@ -174,10 +180,10 @@
|
||||
"message": "Zahrnout \"{file}\"?"
|
||||
},
|
||||
"app.export-modal.modpack-name-label": {
|
||||
"message": "Jméno Modpacku"
|
||||
"message": "Název modpacku"
|
||||
},
|
||||
"app.export-modal.modpack-name-placeholder": {
|
||||
"message": "Jméno modpacku"
|
||||
"message": "Název modpacku"
|
||||
},
|
||||
"app.export-modal.select-files-label": {
|
||||
"message": "Nastavte, které soubory mají být do tohoto exportu zahrnuty"
|
||||
@@ -189,7 +195,7 @@
|
||||
"message": "1.0.0"
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-body": {
|
||||
"message": "Všechna data z instance budou navždy smazána, včetně světů, nastavení a všeho ostatního."
|
||||
"message": "Všechna data tvé instance budou trvale smazána, včetně světů, konfigurací a veškerého nainstalovaného obsahu."
|
||||
},
|
||||
"app.instance.confirm-delete.admonition-header": {
|
||||
"message": "Tato akce nemůže být vrácena"
|
||||
@@ -198,19 +204,19 @@
|
||||
"message": "Odstranit instanci"
|
||||
},
|
||||
"app.instance.confirm-delete.header": {
|
||||
"message": "Odstanit instanci"
|
||||
"message": "Odstranění instance"
|
||||
},
|
||||
"app.instance.modpack-already-installed.body": {
|
||||
"message": "Tento modpack je už nainstalovaný v instanci <bold>{instanceName}</bold>. Opravdu ho chceš duplikovat?"
|
||||
"message": "Tento modpack je již nainstalovaný v instanci <bold>{instanceName}</bold>. Opravdu ho chceš duplikovat?"
|
||||
},
|
||||
"app.instance.modpack-already-installed.create": {
|
||||
"message": "Vytvořit"
|
||||
},
|
||||
"app.instance.modpack-already-installed.header": {
|
||||
"message": "Modpack už je nainstalovaný"
|
||||
"message": "Modpack je již nainstalován"
|
||||
},
|
||||
"app.instance.modpack-already-installed.instance": {
|
||||
"message": "Instalace"
|
||||
"message": "Instance"
|
||||
},
|
||||
"app.instance.mods.content-type-project": {
|
||||
"message": "projekt"
|
||||
@@ -222,7 +228,7 @@
|
||||
"message": "{count} projektů bylo přidáno"
|
||||
},
|
||||
"app.instance.mods.share-text": {
|
||||
"message": "Podívejte se na projekty co používám ve svém modpacku!"
|
||||
"message": "Podívejte se na projekty, které používám ve svém modpacku!"
|
||||
},
|
||||
"app.instance.mods.share-title": {
|
||||
"message": "Sdílení obsahu modpacku"
|
||||
@@ -236,11 +242,14 @@
|
||||
"app.instance.worlds.browse-servers": {
|
||||
"message": "Procházet servery"
|
||||
},
|
||||
"app.instance.worlds.delete-world-description": {
|
||||
"message": "'{name}' bude **navždy smazán** a nebude možné jej obnovit."
|
||||
},
|
||||
"app.instance.worlds.delete-world-title": {
|
||||
"message": "Opravdu si jsi jistý, že chceš navždy smazat tenhle svět?"
|
||||
"message": "Jsi si jistý, že chceš trvale smazat tento svět?"
|
||||
},
|
||||
"app.instance.worlds.filter-modded": {
|
||||
"message": "Módováno"
|
||||
"message": "Módovaný"
|
||||
},
|
||||
"app.instance.worlds.filter-offline": {
|
||||
"message": "Offline"
|
||||
@@ -252,19 +261,22 @@
|
||||
"message": "Vanilla"
|
||||
},
|
||||
"app.instance.worlds.no-worlds-description": {
|
||||
"message": "Přidej nebo procházej servery"
|
||||
"message": "Přidej server nebo začni procházet"
|
||||
},
|
||||
"app.instance.worlds.no-worlds-heading": {
|
||||
"message": "Žádné servery nebo světy nebyly přidány"
|
||||
},
|
||||
"app.instance.worlds.remove-server-description": {
|
||||
"message": "'{name}' bude odstraněn z tvého seznamu i ze hry a nebude možné jej obnovit."
|
||||
},
|
||||
"app.instance.worlds.remove-server-description-with-address": {
|
||||
"message": "'{name}' ({address}) bude odstraněn z vašeho seznamu, a to i ve hře, a nebude možné jej obnovit."
|
||||
"message": "'{name}' ({address}) bude odstraněn z tvého seznamu i ze hry a nebude možné jej obnovit."
|
||||
},
|
||||
"app.instance.worlds.remove-server-title": {
|
||||
"message": "Opravdu chceš odstranit {name}?"
|
||||
},
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Hledat ve světech {count}..."
|
||||
"message": "Hledat v {count} světech..."
|
||||
},
|
||||
"app.instance.worlds.this-server": {
|
||||
"message": "tento server"
|
||||
@@ -273,19 +285,19 @@
|
||||
"message": "Požadovaný obsah"
|
||||
},
|
||||
"app.modal.install-to-play.header": {
|
||||
"message": "Nainstaluj ke hraní"
|
||||
"message": "Nainstaluj pro hraní"
|
||||
},
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Instalovat"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural,one {#mód} other {#módy}}"
|
||||
"message": "{count, plural, one {# mód} few {# módy} other {# módů}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Povinný modpack"
|
||||
"message": "Požadovaný modpack"
|
||||
},
|
||||
"app.modal.install-to-play.server-requires-mods": {
|
||||
"message": "Tento server k hraní vyžaduje módy. Klikni na instalovat pro získání potřebných módů z Modrinth."
|
||||
"message": "Tento server k hraní vyžaduje módy. Klikni na instalovat pro získání potřebných módů z Modrinth a poté se rovnou připoj na server."
|
||||
},
|
||||
"app.modal.install-to-play.shared-instance": {
|
||||
"message": "Sdílená instance"
|
||||
@@ -297,22 +309,22 @@
|
||||
"message": "Zobrazit obsah"
|
||||
},
|
||||
"app.modal.update-to-play.header": {
|
||||
"message": "Updatuj ke hraní"
|
||||
"message": "Aktualizuj pro hraní"
|
||||
},
|
||||
"app.modal.update-to-play.update-required": {
|
||||
"message": "Je vyžadována aktualizace"
|
||||
},
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "Je nutná aktualizace ke hraní {name}. Prosím updatuj na nejnovější verzi k spuštění hry."
|
||||
"message": "Pro hraní {name} je vyžadována aktualizace. Prosím aktualizuj na nejnovější verzi, abys mohl hru spustit."
|
||||
},
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Tento projekt je již nainstalován"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Zpět na Prozkoumat"
|
||||
"message": "Zpět k Objevování"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Nainstalovat obsah do instnce"
|
||||
"message": "Nainstalovat obsah do instance"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Vývojářský režim povolen."
|
||||
@@ -342,7 +354,7 @@
|
||||
"message": "Přidat skin"
|
||||
},
|
||||
"app.skins.add-button.drag-and-drop": {
|
||||
"message": "Vem a drž"
|
||||
"message": "Přetáhni a pusť"
|
||||
},
|
||||
"app.skins.apply-button": {
|
||||
"message": "Použít"
|
||||
@@ -350,24 +362,96 @@
|
||||
"app.skins.delete-button": {
|
||||
"message": "Smazat skin"
|
||||
},
|
||||
"app.skins.delete-modal.description": {
|
||||
"message": "Tahle akce navždy smaže vybraný skin a nejde vrátit zpět."
|
||||
},
|
||||
"app.skins.delete-modal.title": {
|
||||
"message": "Opravdu chceš smazat tenhle skin?"
|
||||
},
|
||||
"app.skins.dropped-file-error.text": {
|
||||
"message": "Nepodařilo se načíst přetažený soubor."
|
||||
},
|
||||
"app.skins.dropped-file-error.title": {
|
||||
"message": "Chyba při načítání souboru"
|
||||
},
|
||||
"app.skins.edit-button": {
|
||||
"message": "Upravit skin"
|
||||
},
|
||||
"app.skins.modal.add-skin-button": {
|
||||
"message": "Přidat skin"
|
||||
},
|
||||
"app.skins.modal.add-title": {
|
||||
"message": "Přidání skinu"
|
||||
},
|
||||
"app.skins.modal.arm-style-section": {
|
||||
"message": "Typ paží"
|
||||
},
|
||||
"app.skins.modal.arm-style-slim": {
|
||||
"message": "Štíhlý"
|
||||
},
|
||||
"app.skins.modal.arm-style-wide": {
|
||||
"message": "Široký"
|
||||
},
|
||||
"app.skins.modal.cape-fallback-name": {
|
||||
"message": "Plášť"
|
||||
},
|
||||
"app.skins.modal.cape-section": {
|
||||
"message": "Plášť"
|
||||
},
|
||||
"app.skins.modal.edit-title": {
|
||||
"message": "Úprava skinu"
|
||||
},
|
||||
"app.skins.modal.make-edit-first-tooltip": {
|
||||
"message": "Nejdříve uprav skin!"
|
||||
},
|
||||
"app.skins.modal.no-cape-tooltip": {
|
||||
"message": "Bez pláště"
|
||||
},
|
||||
"app.skins.modal.none-cape-option": {
|
||||
"message": "Žádný"
|
||||
},
|
||||
"app.skins.modal.replace-texture-button": {
|
||||
"message": "Nahradit texturu"
|
||||
},
|
||||
"app.skins.modal.save-skin-button": {
|
||||
"message": "Uložit skin"
|
||||
},
|
||||
"app.skins.modal.saving-tooltip": {
|
||||
"message": "Ukládání..."
|
||||
},
|
||||
"app.skins.modal.texture-section": {
|
||||
"message": "Textura"
|
||||
},
|
||||
"app.skins.modal.upload-skin-first-tooltip": {
|
||||
"message": "Nejdříve nahraj skin!"
|
||||
},
|
||||
"app.skins.preview.edit-button": {
|
||||
"message": "Upravit skin"
|
||||
},
|
||||
"app.skins.previewing-badge": {
|
||||
"message": "Náhled"
|
||||
},
|
||||
"app.skins.rate-limit.text": {
|
||||
"message": "Měníš svůj skin příliš často. Servery Mojangu dočasně zablokovaly další požadavky. Počkej chvíli, než to zkusíš znovu."
|
||||
},
|
||||
"app.skins.rate-limit.title": {
|
||||
"message": "Zpomal!"
|
||||
},
|
||||
"app.skins.reorder-error.text": {
|
||||
"message": "Tvé pořadí skinů se nepodařilo uložit."
|
||||
},
|
||||
"app.skins.reorder-error.title": {
|
||||
"message": "Nepodařilo se změnit pořadí skinů"
|
||||
},
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
"app.skins.section.default-skins": {
|
||||
"message": "Výchozí skiny"
|
||||
},
|
||||
"app.skins.section.minecon-earth-2017": {
|
||||
"message": "MINECON Earth 2017"
|
||||
},
|
||||
@@ -377,14 +461,47 @@
|
||||
"app.skins.section.modrinth-pride": {
|
||||
"message": "Modrinth Pride"
|
||||
},
|
||||
"app.skins.section.modrinth-pride.tooltip": {
|
||||
"message": "Tyto skiny jsi obdržel za přispění do sbírky Modrinth Pride behěm Pride měsíce."
|
||||
},
|
||||
"app.skins.section.mounts-of-mayhem": {
|
||||
"message": "Mounts of Mayhem"
|
||||
},
|
||||
"app.skins.section.saved-skins": {
|
||||
"message": "Uložené skiny"
|
||||
},
|
||||
"app.skins.section.striding-hero": {
|
||||
"message": "Striding Hero"
|
||||
},
|
||||
"app.skins.section.the-copper-age": {
|
||||
"message": "The Copper Age"
|
||||
},
|
||||
"app.skins.section.the-garden-awakens": {
|
||||
"message": "The Garden Awakens"
|
||||
},
|
||||
"app.skins.section.tiny-takeover": {
|
||||
"message": "Tiny Takeover"
|
||||
},
|
||||
"app.skins.sign-in.button": {
|
||||
"message": "Přihlásit se"
|
||||
},
|
||||
"app.skins.sign-in.description": {
|
||||
"message": "Přihlas se prosím ke svému Minecraft účtu, abys mohl/a využívat funkce pro správu skinů v aplikaci Modrinth."
|
||||
},
|
||||
"app.skins.sign-in.rinthbot-alt": {
|
||||
"message": "Nadšený Modrinth Bot"
|
||||
},
|
||||
"app.skins.sign-in.title": {
|
||||
"message": "Přihlas se prosím"
|
||||
},
|
||||
"app.skins.title": {
|
||||
"message": "Výběr skinu"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Stahování aplikace Modrinth v{version} bylo dokončeno. Nainstalujte aktualizaci nyní nebo automaticky po zavření aplikace Modrinth."
|
||||
"message": "Stahování aplikace Modrinth v{version} bylo dokončeno. Aktualizujte ji znovunačtením nebo se automaticky aktualizuje po zavření."
|
||||
},
|
||||
"app.update-popup.body.linux": {
|
||||
"message": "Aplikace Modrinth v{version} je k dispozici. Aktualizujte pomocí svého správce balíčků, abyste získali nejnovější funkce a opravy!"
|
||||
"message": "Aplikace Modrinth v{version} je k dispozici. Aktualizujte ji pomocí svého správce balíčků, abyste získali nejnovější funkce a opravy!"
|
||||
},
|
||||
"app.update-popup.body.metered": {
|
||||
"message": "Aplikace Modrinth v{version} je nyní k dispozici! Protože jste v měřené síti, nebyla stažena automaticky."
|
||||
@@ -398,8 +515,11 @@
|
||||
"app.update-popup.download-complete": {
|
||||
"message": "Stahování bylo dokončeno"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "Znovu načíst pro aktualizaci"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "Je k dispozici aktualizace"
|
||||
"message": "Aktualizace k dispozici"
|
||||
},
|
||||
"app.update.complete-toast.text": {
|
||||
"message": "Kliknutím sem zobrazíte seznam změn."
|
||||
@@ -411,13 +531,13 @@
|
||||
"message": "priklad.modrinth.gg"
|
||||
},
|
||||
"app.world.server-modal.select-an-option": {
|
||||
"message": "Vyberte možnost"
|
||||
"message": "Vybrat možnost"
|
||||
},
|
||||
"app.world.world-item.incompatible-version": {
|
||||
"message": "Nekompatibilní verze {version}"
|
||||
},
|
||||
"app.world.world-item.not-played-yet": {
|
||||
"message": "Ještě nehráno"
|
||||
"message": "Zatím nehráno"
|
||||
},
|
||||
"app.world.world-item.offline": {
|
||||
"message": "Offline"
|
||||
@@ -429,25 +549,25 @@
|
||||
"message": "Přidat přítele"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} přátelé {count, plural, one {request} other {requests}}"
|
||||
"message": "{count} {count, plural, one {žádost} few {žádosti} other {žádostí}} o přátelství"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Poslat žádost o přátelství"
|
||||
},
|
||||
"friends.add-friend.title": {
|
||||
"message": "Přidávání kamaráda"
|
||||
"message": "Přidání přítele"
|
||||
},
|
||||
"friends.add-friend.username.description": {
|
||||
"message": "Může být jiné než jejich Minecraft jméno!"
|
||||
"message": "Může se lišit od jejich Minecraft přezdívky!"
|
||||
},
|
||||
"friends.add-friend.username.placeholder": {
|
||||
"message": "Zadejte uživatelské jméno Modrinth..."
|
||||
"message": "Zadej přezdívku na Modrinthu..."
|
||||
},
|
||||
"friends.add-friend.username.title": {
|
||||
"message": "Jak se váš kamarád jmenuje na Modrinthu?"
|
||||
"message": "Jaká je přezdívka tvého přítele na Modrinthu?"
|
||||
},
|
||||
"friends.add-friends-to-share": {
|
||||
"message": "<link>Přidejte si přátelé</link> a podívejte se, co hrají!"
|
||||
"message": "<link>Přidej si přátele</link>, abys viděl, co hrají!"
|
||||
},
|
||||
"friends.friend.cancel-request": {
|
||||
"message": "Zrušit žádost"
|
||||
@@ -462,7 +582,7 @@
|
||||
"message": "Zobrazit profil"
|
||||
},
|
||||
"friends.heading": {
|
||||
"message": "Kamarádi"
|
||||
"message": "Přátelé"
|
||||
},
|
||||
"friends.heading.active": {
|
||||
"message": "Aktivní"
|
||||
@@ -476,6 +596,9 @@
|
||||
"friends.heading.pending": {
|
||||
"message": "Čeká na vyřízení"
|
||||
},
|
||||
"friends.no-friends-match": {
|
||||
"message": "Žádní přátelé neodpovídají ''{query}''"
|
||||
},
|
||||
"friends.search-friends-placeholder": {
|
||||
"message": "Hledat přátele..."
|
||||
},
|
||||
@@ -483,7 +606,7 @@
|
||||
"message": "{title} - {count}"
|
||||
},
|
||||
"friends.sign-in-to-add-friends": {
|
||||
"message": "<link>Přihlašte se ke svému Modrinth účtu</link>, abyste jsi přidali přátele a uviděli co hrají!"
|
||||
"message": "<link>Přihlas se k Modrinth účtu</link>, abys mohl přidávat přátele a vidět, co hrají!"
|
||||
},
|
||||
"instance.add-server.add-and-play": {
|
||||
"message": "Přidat a hrát"
|
||||
@@ -495,10 +618,10 @@
|
||||
"message": "Vypnuto"
|
||||
},
|
||||
"instance.add-server.resource-pack.enabled": {
|
||||
"message": "Zapnuto"
|
||||
"message": "Povolený"
|
||||
},
|
||||
"instance.add-server.resource-pack.prompt": {
|
||||
"message": "Ptát se"
|
||||
"message": "Zeptat se"
|
||||
},
|
||||
"instance.add-server.title": {
|
||||
"message": "Přidat server"
|
||||
@@ -507,7 +630,7 @@
|
||||
"message": "Upravit server"
|
||||
},
|
||||
"instance.edit-world.hide-from-home": {
|
||||
"message": "Skrýt z domovské obrazovky"
|
||||
"message": "Skrýt z domovské stránky"
|
||||
},
|
||||
"instance.edit-world.name": {
|
||||
"message": "Název"
|
||||
@@ -516,7 +639,7 @@
|
||||
"message": "Minecraft svět"
|
||||
},
|
||||
"instance.edit-world.reset-icon": {
|
||||
"message": "Resetovat ikonu"
|
||||
"message": "Obnovit ikonu"
|
||||
},
|
||||
"instance.edit-world.title": {
|
||||
"message": "Upravit svět"
|
||||
@@ -534,22 +657,22 @@
|
||||
"message": "Název"
|
||||
},
|
||||
"instance.server-modal.placeholder-name": {
|
||||
"message": "Minecraft Server"
|
||||
"message": "Minecraft server"
|
||||
},
|
||||
"instance.server-modal.resource-pack": {
|
||||
"message": "Balíčky textur"
|
||||
"message": "Balíček textur"
|
||||
},
|
||||
"instance.settings.tabs.general": {
|
||||
"message": "Obecné"
|
||||
},
|
||||
"instance.settings.tabs.general.delete": {
|
||||
"message": "Odstranit instalaci"
|
||||
"message": "Odstranění instance"
|
||||
},
|
||||
"instance.settings.tabs.general.delete.button": {
|
||||
"message": "Odstranit instalaci"
|
||||
"message": "Odstranit instanci"
|
||||
},
|
||||
"instance.settings.tabs.general.delete.description": {
|
||||
"message": "Trvale smaže instalaci z vašeho zařízení, včetně vašich světů, konfigurací a veškerého nainstalovaného obsahu. Buďte opatrní, protože jakmile instalaci smažete, nebude možné ji obnovit."
|
||||
"message": "Trvale smaže instanci z tvého zařízení, včetně světů, konfigurací a veškerého nainstalovaného obsahu. Buď opatrný, jakmile instanci smažeš, nepůjde ji obnovit."
|
||||
},
|
||||
"instance.settings.tabs.general.deleting.button": {
|
||||
"message": "Mazání..."
|
||||
@@ -558,47 +681,65 @@
|
||||
"message": "Duplikovat"
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-button.tooltip.installing": {
|
||||
"message": "Nelze duplikovat při instalaci."
|
||||
"message": "Nelze duplikovat během instalace."
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-instance": {
|
||||
"message": "Duplikovat instalaci"
|
||||
"message": "Duplikace instance"
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-instance.description": {
|
||||
"message": "Vytvoří kopii této instalace, včetně světů, konfigurací, modů atd."
|
||||
"message": "Vytvoří kopii této instance, včetně světů, konfigurací, modů, atd."
|
||||
},
|
||||
"instance.settings.tabs.general.edit-icon": {
|
||||
"message": "Upravit ikonu"
|
||||
},
|
||||
"instance.settings.tabs.general.edit-icon.remove": {
|
||||
"message": "Odstranit ikonu"
|
||||
"message": "Odebrat ikonu"
|
||||
},
|
||||
"instance.settings.tabs.general.edit-icon.replace": {
|
||||
"message": "Změnit ikonu"
|
||||
"message": "Nahradit ikonu"
|
||||
},
|
||||
"instance.settings.tabs.general.edit-icon.select": {
|
||||
"message": "Vybrat ikonu"
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups": {
|
||||
"message": "Skupina knihoven"
|
||||
"message": "Skupiny knihovny"
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups.create": {
|
||||
"message": "Vytvořit novou skupinu"
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups.description": {
|
||||
"message": "Skupiny knihoven vám umožňují uspořádat instalace do různých sekcí."
|
||||
"message": "Skupiny knihovny ti umožňují uspořádat instance do různých sekcí v knihovně."
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups.enter-name": {
|
||||
"message": "Zadejte název skupiny"
|
||||
"message": "Zadej název skupiny"
|
||||
},
|
||||
"instance.settings.tabs.general.name": {
|
||||
"message": "Název"
|
||||
"message": "Jméno"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel": {
|
||||
"message": "Aktualizační kanál"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha": {
|
||||
"message": "Alpha"
|
||||
"message": "Alfa"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha.description": {
|
||||
"message": "Vydané, beta a alfa verze se zobrazí jako dostupné aktualizace."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta": {
|
||||
"message": "Beta"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta.description": {
|
||||
"message": "Vydané a beta verze se zobrazí jako dostupné aktualizace."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release": {
|
||||
"message": "Vydání"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release.description": {
|
||||
"message": "Pouze vydané verze se zobrazí jako dostupné aktualizace."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.select": {
|
||||
"message": "Vyber aktualizační kanál"
|
||||
},
|
||||
"instance.settings.tabs.hooks": {
|
||||
"message": "Spouštěcí hooky"
|
||||
},
|
||||
@@ -606,28 +747,28 @@
|
||||
"message": "Vlastní spouštěcí hooky"
|
||||
},
|
||||
"instance.settings.tabs.hooks.description": {
|
||||
"message": "Hooky umožňují pokročilým uživatelům spouštět určité systémové příkazy před a po spuštění hry."
|
||||
"message": "Hooky umožňují pokročilým uživatelům spustit určité systémové příkazy před a po spuštění hry."
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit": {
|
||||
"message": "Po ukončení"
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit.description": {
|
||||
"message": "Spušteno po vypnutí hry."
|
||||
"message": "Provede se po ukončení hry."
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit.enter": {
|
||||
"message": "Zadejte příkaz k provedení po ukončení..."
|
||||
"message": "Zadej příkaz k provedení po ukončení..."
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch": {
|
||||
"message": "Před spuštěním"
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch.description": {
|
||||
"message": "Spouštějí se před spuštěním instalace."
|
||||
"message": "Provede se před spuštěním instance."
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch.enter": {
|
||||
"message": "Zadejte příkaz k provedení před spuštěním..."
|
||||
"message": "Zadej příkaz k provedení před spuštěním..."
|
||||
},
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Spouštěcí hooky hry"
|
||||
"message": "Spouštěcí příkazy hry"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper": {
|
||||
"message": "Wrapper"
|
||||
@@ -636,7 +777,7 @@
|
||||
"message": "Příkaz wrapperu pro spuštění Minecraftu."
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper.enter": {
|
||||
"message": "Zadejte příkaz wrapperu..."
|
||||
"message": "Zadej příkaz wrapperu..."
|
||||
},
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Instalace"
|
||||
@@ -647,6 +788,24 @@
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java a pamět"
|
||||
},
|
||||
"instance.settings.tabs.java.custom-environment-variables": {
|
||||
"message": "Vlastní proměnná prostředí"
|
||||
},
|
||||
"instance.settings.tabs.java.custom-java-arguments": {
|
||||
"message": "Vlastní argumenty Javy"
|
||||
},
|
||||
"instance.settings.tabs.java.custom-java-installation": {
|
||||
"message": "Vlastní instalace Javy"
|
||||
},
|
||||
"instance.settings.tabs.java.custom-memory-allocation": {
|
||||
"message": "Vlastní nastavení paměti"
|
||||
},
|
||||
"instance.settings.tabs.java.enter-environment-variables": {
|
||||
"message": "Zadej proměnná prostředí..."
|
||||
},
|
||||
"instance.settings.tabs.java.enter-java-arguments": {
|
||||
"message": "Zadej argumenty Javy..."
|
||||
},
|
||||
"instance.settings.tabs.java.environment-variables": {
|
||||
"message": "Proměnné prostředí"
|
||||
},
|
||||
@@ -654,13 +813,16 @@
|
||||
"message": "Hooky"
|
||||
},
|
||||
"instance.settings.tabs.java.java-arguments": {
|
||||
"message": "Java argumenty"
|
||||
"message": "Argumenty Javy"
|
||||
},
|
||||
"instance.settings.tabs.java.java-installation": {
|
||||
"message": "Instalace Javy"
|
||||
},
|
||||
"instance.settings.tabs.java.java-memory": {
|
||||
"message": "Paměti přiřazeno"
|
||||
"message": "Přiřazeno paměti"
|
||||
},
|
||||
"instance.settings.tabs.java.java-path-placeholder": {
|
||||
"message": "/path/to/java"
|
||||
},
|
||||
"instance.settings.tabs.window": {
|
||||
"message": "Okno"
|
||||
@@ -669,10 +831,10 @@
|
||||
"message": "Vlastní nastavení okna"
|
||||
},
|
||||
"instance.settings.tabs.window.fullscreen": {
|
||||
"message": "Celá obrazovka"
|
||||
"message": "Režim celé obrazovky"
|
||||
},
|
||||
"instance.settings.tabs.window.fullscreen.description": {
|
||||
"message": "Spustit hru v plné obrazovce pokud spuštěno (použitím options.txt)."
|
||||
"message": "Při spuštění otevřít hru v režimu celé obrazovky (použitím options.txt)."
|
||||
},
|
||||
"instance.settings.tabs.window.height": {
|
||||
"message": "Výška"
|
||||
@@ -681,7 +843,7 @@
|
||||
"message": "Výška herního okna při spuštění."
|
||||
},
|
||||
"instance.settings.tabs.window.height.enter": {
|
||||
"message": "Zadejte výšku..."
|
||||
"message": "Zadej výšku..."
|
||||
},
|
||||
"instance.settings.tabs.window.width": {
|
||||
"message": "Šířka"
|
||||
@@ -690,19 +852,19 @@
|
||||
"message": "Šířka herního okna při spuštění."
|
||||
},
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Zadejte šířku..."
|
||||
"message": "Zadej šířku..."
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Minecraft Server"
|
||||
"message": "Minecraft server"
|
||||
},
|
||||
"instance.worlds.cant_connect": {
|
||||
"message": "Nelze připojit k serveru"
|
||||
"message": "Nelze se připojit k serveru"
|
||||
},
|
||||
"instance.worlds.copy_address": {
|
||||
"message": "Kopírovat adresu"
|
||||
},
|
||||
"instance.worlds.dont_show_on_home": {
|
||||
"message": "Nezobrazuje na domovské stránce"
|
||||
"message": "Nezobrazovat na domovské stránce"
|
||||
},
|
||||
"instance.worlds.game_already_open": {
|
||||
"message": "Instance je již otevřená"
|
||||
@@ -717,13 +879,13 @@
|
||||
"message": "Spravováno projektem serveru"
|
||||
},
|
||||
"instance.worlds.no_contact": {
|
||||
"message": "Server se nepodařilo spojit"
|
||||
"message": "Se serverem se nepodařilo spojit"
|
||||
},
|
||||
"instance.worlds.no_server_quick_play": {
|
||||
"message": "Můžeš rovnou skočit na server pouze v Minecraftu Alpha 1.0.5+"
|
||||
"message": "Připojit se rovnou k serverům můžeš pouze s Minecraft verzí Alpha 1.0.5+"
|
||||
},
|
||||
"instance.worlds.no_singleplayer_quick_play": {
|
||||
"message": "V Minecraftu 1.20+ se dá rovnou přeskočit pouze do singleplayerových světů"
|
||||
"message": "Můžeš se rovnou připojit do světů pro jednoho hráče pouze s Minecraft verzí 1.20+"
|
||||
},
|
||||
"instance.worlds.play_instance": {
|
||||
"message": "Hrát instanci"
|
||||
@@ -732,22 +894,22 @@
|
||||
"message": "Zobrazit instanci"
|
||||
},
|
||||
"instance.worlds.world_in_use": {
|
||||
"message": "Svět je použit"
|
||||
"message": "Svět je používán"
|
||||
},
|
||||
"minecraft-account.add-account": {
|
||||
"message": "Přidat účet"
|
||||
},
|
||||
"minecraft-account.label": {
|
||||
"message": "Účet Minecraft"
|
||||
"message": "Minecraft účet"
|
||||
},
|
||||
"minecraft-account.not-signed-in": {
|
||||
"message": "Nejste přihlášeni"
|
||||
},
|
||||
"minecraft-account.remove-account": {
|
||||
"message": "Odstranit účet"
|
||||
"message": "Odebrat účet"
|
||||
},
|
||||
"minecraft-account.select-account": {
|
||||
"message": "Vyberte účet"
|
||||
"message": "Zvolte účet"
|
||||
},
|
||||
"minecraft-account.sign-in": {
|
||||
"message": "Přihlásit se do Minecraftu"
|
||||
@@ -756,31 +918,31 @@
|
||||
"message": "Poskytováno instancí"
|
||||
},
|
||||
"search.filter.locked.instance-game-version.title": {
|
||||
"message": "Verze hry je poskytnut instanci"
|
||||
"message": "Verze hry je poskytována instancí"
|
||||
},
|
||||
"search.filter.locked.instance-loader.title": {
|
||||
"message": "Spouštěč je poskytnut instancí"
|
||||
"message": "Načítací modul je poskytován instancí"
|
||||
},
|
||||
"search.filter.locked.instance.sync": {
|
||||
"message": "Synchronizováno z instancí"
|
||||
"message": "Synchronizováno s instancí"
|
||||
},
|
||||
"search.filter.locked.server": {
|
||||
"message": "Poskytováno serverem"
|
||||
},
|
||||
"search.filter.locked.server-environment.title": {
|
||||
"message": "Jen klientské mody mohou být přidány na server"
|
||||
"message": "Pouze módy ze strany klientu mohou být přidány na server"
|
||||
},
|
||||
"search.filter.locked.server-game-version.title": {
|
||||
"message": "Verzi hry poskytuje server"
|
||||
"message": "Verze hry je poskytována serverem"
|
||||
},
|
||||
"search.filter.locked.server-loader.title": {
|
||||
"message": "Loader zprostředkovává server"
|
||||
},
|
||||
"unknown-pack-warning-modal.body": {
|
||||
"message": "Soubor je zkontrolován pouze v případě, že je nahrán na Modrinth, a to bez ohledu na jeho formát (včetně formátu .mrpack)."
|
||||
"message": "Soubor je zkontrolován pouze v případě, že je nahrán na Modrinth, bez ohledu na jeho formát (včetně formátu .mrpack)."
|
||||
},
|
||||
"unknown-pack-warning-modal.dont-show-again": {
|
||||
"message": "Toto varování již nezobrazovat"
|
||||
"message": "Toto varování znovu nezobrazovat"
|
||||
},
|
||||
"unknown-pack-warning-modal.header": {
|
||||
"message": "Potvrdit instalaci"
|
||||
|
||||
@@ -23,12 +23,18 @@
|
||||
"app.action-bar.primary-instance": {
|
||||
"message": "Primære instance"
|
||||
},
|
||||
"app.action-bar.reload-to-update": {
|
||||
"message": "Genindlæs for at opdater"
|
||||
},
|
||||
"app.action-bar.show-more-running-instances": {
|
||||
"message": "Vis flere kørende instances"
|
||||
},
|
||||
"app.action-bar.stop-instance": {
|
||||
"message": "Stop instance"
|
||||
},
|
||||
"app.action-bar.update": {
|
||||
"message": "Opdater"
|
||||
},
|
||||
"app.action-bar.view-active-downloads": {
|
||||
"message": "Vis aktive downloads"
|
||||
},
|
||||
@@ -146,6 +152,9 @@
|
||||
"app.browse.server.installing": {
|
||||
"message": "Installere"
|
||||
},
|
||||
"app.content-install.no-compatible-versions": {
|
||||
"message": "Ingen tilgængelige versioner passer til {compatibilityLabel}. Vælg en version for at installere. Afhængigheder bliver ikke installeret automatisk."
|
||||
},
|
||||
"app.creation-modal.installing-modpack.description": {
|
||||
"message": "{fileName}"
|
||||
},
|
||||
|
||||
@@ -429,7 +429,7 @@
|
||||
"message": "Nicht so schnell!"
|
||||
},
|
||||
"app.skins.reorder-error.text": {
|
||||
"message": "Die Anordnung deiner Skins konnte nicht gespeichert werden."
|
||||
"message": "Deine Skin-Reihenfolge konnte nicht gespeichert werden."
|
||||
},
|
||||
"app.skins.reorder-error.title": {
|
||||
"message": "Skins konnten nicht neu angeordnet werden"
|
||||
@@ -708,28 +708,28 @@
|
||||
"message": "Name"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel": {
|
||||
"message": "Aktualisierungskanal"
|
||||
"message": "Update-Kanal"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha": {
|
||||
"message": "Alpha"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha.description": {
|
||||
"message": "Voll, Beta- und Alpha-Versionen werden als verfügbare Aktualisierungen angezeigt."
|
||||
"message": "Release-, Beta- und Alpha-Versionen werden als verfügbare Updates angezeigt."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta": {
|
||||
"message": "Beta"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta.description": {
|
||||
"message": "Voll- und Beta-Versionen werden als verfügbare Aktualisierungen angezeigt."
|
||||
"message": "Release- und Beta-Versionen werden als verfügbare Updates angezeigt."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release": {
|
||||
"message": "Vollversion"
|
||||
"message": "Release"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release.description": {
|
||||
"message": "Nur Vollversionen werden als verfügbare Aktualisierungen angezeigt."
|
||||
"message": "Nur Release-Versionen werden als verfügbare Updates angezeigt."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.select": {
|
||||
"message": "Aktualisierungskanal auswählen"
|
||||
"message": "Update-Kanal auswählen"
|
||||
},
|
||||
"instance.settings.tabs.hooks": {
|
||||
"message": "Start Hooks"
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
"app.action-bar.downloading-java": {
|
||||
"message": "Dina-download ang Java {version}"
|
||||
},
|
||||
"app.action-bar.downloading-update": {
|
||||
"message": "Dina-download ang update"
|
||||
},
|
||||
"app.action-bar.downloads": {
|
||||
"message": "Mga downloads"
|
||||
},
|
||||
@@ -20,6 +23,9 @@
|
||||
"app.action-bar.primary-instance": {
|
||||
"message": "Pangunahing instansiya"
|
||||
},
|
||||
"app.action-bar.reload-to-update": {
|
||||
"message": "Mag-reload upang ma-update"
|
||||
},
|
||||
"app.action-bar.show-more-running-instances": {
|
||||
"message": "Ipakita ang mas marami pang tumatakbong instansiya"
|
||||
},
|
||||
@@ -89,6 +95,9 @@
|
||||
"app.appearance-settings.select-option": {
|
||||
"message": "Pumili ng opsiyon"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Magpapakita ang katagal ng iyong paglalaro sa isang instansiya."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Pagpapagana na mata-toggle ang sidebar."
|
||||
},
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
"message": "Afficher le temps de jeu"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Permet d’afficher ou de masquer la barre latérale."
|
||||
"message": "Permet d'ouvrir ou de fermer la barre latérale."
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.title": {
|
||||
"message": "Tiroir latéral"
|
||||
|
||||
@@ -8,6 +8,12 @@
|
||||
"app.action-bar.downloads": {
|
||||
"message": "הורדות"
|
||||
},
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "החבא יותר התקנים רצים"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "הפוך למקרה ראשי"
|
||||
},
|
||||
"app.action-bar.offline": {
|
||||
"message": "לא מקוון"
|
||||
},
|
||||
@@ -260,6 +266,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "הוספת חבר"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count, plural, one {בקשת חברות אחת} other {# בקשות חברות}}"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "שליחת בקשת חברות"
|
||||
},
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
"message": "A kezdőlap „Folytasd itt” részében a legújabb világok is megtalálhatók."
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "„Folytasd itt” a világokat is"
|
||||
"message": "Visszaugrás a világokba"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "Minimalizáld az indítót a Minecraft indításakor."
|
||||
@@ -290,6 +290,9 @@
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Telepítés"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count} mod"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Szükséges modcsomag"
|
||||
},
|
||||
@@ -539,6 +542,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "Barát hozzáadása"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} barát {count, plural, other {kérelem}}"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Barátkérelem elküldése"
|
||||
},
|
||||
@@ -708,19 +714,19 @@
|
||||
"message": "Frissítési csatorna"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha": {
|
||||
"message": "Alpha"
|
||||
"message": "Alfa"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha.description": {
|
||||
"message": "A release, béta és az alpha verziók is meg fognak jelenni az elérhető frissítések között."
|
||||
"message": "A kiadás, béta és az alfa verziók is meg fognak jelenni az elérhető frissítések között."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta": {
|
||||
"message": "Béta"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta.description": {
|
||||
"message": "A release és a béta verziók is meg fognak jelenni az elérhető frissítések között."
|
||||
"message": "A kiadás és a béta verziók is meg fognak jelenni az elérhető frissítések között."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release": {
|
||||
"message": "Release"
|
||||
"message": "Kiadás"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release.description": {
|
||||
"message": "Csak a release verziók fognak megjelenni az elérhető frissítések között."
|
||||
|
||||
@@ -290,6 +290,9 @@
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Pasang"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, other {# mod}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Paket mod yang diperlukan"
|
||||
},
|
||||
@@ -545,6 +548,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "Tambah teman"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} {count, plural, other {permintaan}} teman"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Kirim permintaan teman"
|
||||
},
|
||||
|
||||
@@ -278,6 +278,9 @@
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Installa"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count} mod"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Pacchetto di mod richiesto"
|
||||
},
|
||||
@@ -533,6 +536,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "Stringi un'amicizia"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count, plural, one {# richiesta} other {# richieste}} d''amicizia"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Invia richiesta d'amicizia"
|
||||
},
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
"app.action-bar.downloading-java": {
|
||||
"message": "Java {version} をダウンロード中"
|
||||
},
|
||||
"app.action-bar.downloading-update": {
|
||||
"message": "アップデートをダウンロード中"
|
||||
},
|
||||
"app.action-bar.downloads": {
|
||||
"message": "ダウンロード"
|
||||
},
|
||||
@@ -260,6 +263,9 @@
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "インストール"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, other {#個のMod}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "必須のModパック"
|
||||
},
|
||||
@@ -308,6 +314,21 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "リソース管理"
|
||||
},
|
||||
"app.skins.modal.arm-style-slim": {
|
||||
"message": "スリム"
|
||||
},
|
||||
"app.skins.modal.arm-style-wide": {
|
||||
"message": "ワイド"
|
||||
},
|
||||
"app.skins.modal.cape-fallback-name": {
|
||||
"message": "マント"
|
||||
},
|
||||
"app.skins.modal.cape-section": {
|
||||
"message": "マント"
|
||||
},
|
||||
"app.skins.modal.no-cape-tooltip": {
|
||||
"message": "マントなし"
|
||||
},
|
||||
"app.skins.modal.replace-texture-button": {
|
||||
"message": "置きかえる"
|
||||
},
|
||||
@@ -317,6 +338,42 @@
|
||||
"app.skins.preview.edit-button": {
|
||||
"message": "編集"
|
||||
},
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "ビルダーズ&バイオーム"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "チェイス・ザ・スカイ"
|
||||
},
|
||||
"app.skins.section.minecon-earth-2017": {
|
||||
"message": "MINECON Earth 2017"
|
||||
},
|
||||
"app.skins.section.modrinth": {
|
||||
"message": "Modrinth"
|
||||
},
|
||||
"app.skins.section.modrinth-pride": {
|
||||
"message": "Modrinth プライド"
|
||||
},
|
||||
"app.skins.section.mounts-of-mayhem": {
|
||||
"message": "マウント・オブ・メイヘム"
|
||||
},
|
||||
"app.skins.section.saved-skins": {
|
||||
"message": "保存済みのスキン"
|
||||
},
|
||||
"app.skins.section.striding-hero": {
|
||||
"message": "Striding Hero"
|
||||
},
|
||||
"app.skins.section.the-copper-age": {
|
||||
"message": "銅の時代"
|
||||
},
|
||||
"app.skins.section.the-garden-awakens": {
|
||||
"message": "ガーデン・アウェイケンズ"
|
||||
},
|
||||
"app.skins.section.tiny-takeover": {
|
||||
"message": "タイニー・テイクオーバー"
|
||||
},
|
||||
"app.skins.sign-in.rinthbot-alt": {
|
||||
"message": "ワクワクしている Modrinth ボット"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} のダウンロードが完了しました。今すぐ更新するには再読み込みするか、Modrinth Appを閉じる際に自動更新されます。"
|
||||
},
|
||||
@@ -365,6 +422,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "フレンドを追加"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count}件の友達リクエスト"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "フレンド申請を送信"
|
||||
},
|
||||
|
||||
@@ -533,6 +533,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "친구 추가"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count}건의 친구 요청"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "친구 요청 보내기"
|
||||
},
|
||||
|
||||
@@ -275,6 +275,9 @@
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Pasang"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, other {# mod}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Pek mod yang diperlukan"
|
||||
},
|
||||
@@ -485,6 +488,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "Tambah rakan"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} {count, plural, other {permintaan}} rakan"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Hantar permintaan rakan"
|
||||
},
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
"app.action-bar.downloading-java": {
|
||||
"message": "Java {version} aan het downloaden"
|
||||
},
|
||||
"app.action-bar.downloading-update": {
|
||||
"message": "Update aan het downloaden"
|
||||
},
|
||||
"app.action-bar.downloads": {
|
||||
"message": "Downloads"
|
||||
},
|
||||
@@ -20,12 +23,18 @@
|
||||
"app.action-bar.primary-instance": {
|
||||
"message": "Primaire instantie"
|
||||
},
|
||||
"app.action-bar.reload-to-update": {
|
||||
"message": "Herlaadt om te updaten"
|
||||
},
|
||||
"app.action-bar.show-more-running-instances": {
|
||||
"message": "Toon meer actieve instanties"
|
||||
},
|
||||
"app.action-bar.stop-instance": {
|
||||
"message": "Stop instantie"
|
||||
},
|
||||
"app.action-bar.update": {
|
||||
"message": "Updaten"
|
||||
},
|
||||
"app.action-bar.view-active-downloads": {
|
||||
"message": "Bekijk actieve downloads"
|
||||
},
|
||||
@@ -86,6 +95,12 @@
|
||||
"app.appearance-settings.select-option": {
|
||||
"message": "Selecteer een optie"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "Toont hoeveel tijd je aan een instantie hebt besteed."
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "Speeltijd laten zien"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "Schakelt de mogelijkheid om de zijbalk in- of uit te schakelen in."
|
||||
},
|
||||
@@ -143,6 +158,9 @@
|
||||
"app.browse.server.installing": {
|
||||
"message": "Installeren"
|
||||
},
|
||||
"app.content-install.no-compatible-versions": {
|
||||
"message": "Er zijn geen beschikbare versies die overeenkomen met {compatibilityLabel}. Selecteer toch een versie om te installeren. Afhankelijkheden worden niet automatisch geïnstalleerd."
|
||||
},
|
||||
"app.creation-modal.installing-modpack.description": {
|
||||
"message": "{fileName}"
|
||||
},
|
||||
@@ -254,6 +272,9 @@
|
||||
"app.instance.worlds.remove-server-title": {
|
||||
"message": "Ben je zeker dat je {name} wil verwijderen?"
|
||||
},
|
||||
"app.instance.worlds.search-worlds-placeholder": {
|
||||
"message": "Zoek werelden"
|
||||
},
|
||||
"app.instance.worlds.this-server": {
|
||||
"message": "deze server"
|
||||
},
|
||||
@@ -296,6 +317,9 @@
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "Dit project is al geïnstalleerd"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "Terug naar Ontdekken"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "Installeer content naar instantie"
|
||||
},
|
||||
@@ -323,6 +347,153 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "Bronnenbeheer"
|
||||
},
|
||||
"app.skins.add-button": {
|
||||
"message": "Skin toevoegen"
|
||||
},
|
||||
"app.skins.add-button.drag-and-drop": {
|
||||
"message": "Slepen en neerzetten"
|
||||
},
|
||||
"app.skins.apply-button": {
|
||||
"message": "Toepassen"
|
||||
},
|
||||
"app.skins.delete-button": {
|
||||
"message": "Skin verwijderen"
|
||||
},
|
||||
"app.skins.delete-modal.description": {
|
||||
"message": "De geselecteerde skin wordt permanent verwijderd. Deze actie kan niet ongedaan worden gemaakt."
|
||||
},
|
||||
"app.skins.delete-modal.title": {
|
||||
"message": "Weet u zeker dat u deze skin wilt verwijderen?"
|
||||
},
|
||||
"app.skins.dropped-file-error.text": {
|
||||
"message": "Kan het neergezette bestand niet lezen."
|
||||
},
|
||||
"app.skins.dropped-file-error.title": {
|
||||
"message": "Fout bij het verwerken van het bestand"
|
||||
},
|
||||
"app.skins.edit-button": {
|
||||
"message": "Skin aanpassen"
|
||||
},
|
||||
"app.skins.modal.add-skin-button": {
|
||||
"message": "Skin toevoegen"
|
||||
},
|
||||
"app.skins.modal.add-title": {
|
||||
"message": "Voeg een skin toe"
|
||||
},
|
||||
"app.skins.modal.arm-style-section": {
|
||||
"message": "Armstijl"
|
||||
},
|
||||
"app.skins.modal.arm-style-slim": {
|
||||
"message": "Slank"
|
||||
},
|
||||
"app.skins.modal.arm-style-wide": {
|
||||
"message": "Breed"
|
||||
},
|
||||
"app.skins.modal.cape-fallback-name": {
|
||||
"message": "Cape"
|
||||
},
|
||||
"app.skins.modal.cape-section": {
|
||||
"message": "Cape"
|
||||
},
|
||||
"app.skins.modal.edit-title": {
|
||||
"message": "Skin aan het aanpassen"
|
||||
},
|
||||
"app.skins.modal.make-edit-first-tooltip": {
|
||||
"message": "Verander eerst iets aan de skin!"
|
||||
},
|
||||
"app.skins.modal.no-cape-tooltip": {
|
||||
"message": "Geen cape"
|
||||
},
|
||||
"app.skins.modal.none-cape-option": {
|
||||
"message": "Geen"
|
||||
},
|
||||
"app.skins.modal.replace-texture-button": {
|
||||
"message": "Texture vervangen"
|
||||
},
|
||||
"app.skins.modal.save-skin-button": {
|
||||
"message": "Skin opslaan"
|
||||
},
|
||||
"app.skins.modal.saving-tooltip": {
|
||||
"message": "Opslaan..."
|
||||
},
|
||||
"app.skins.modal.texture-section": {
|
||||
"message": "Textuur"
|
||||
},
|
||||
"app.skins.modal.upload-skin-first-tooltip": {
|
||||
"message": "Upload eerst een skin!"
|
||||
},
|
||||
"app.skins.preview.edit-button": {
|
||||
"message": "Skin aanpassen"
|
||||
},
|
||||
"app.skins.previewing-badge": {
|
||||
"message": "Voorvertonen"
|
||||
},
|
||||
"app.skins.rate-limit.text": {
|
||||
"message": "U verandert te snel van skin. Mojang's servers hebben nieuwe aanvragen tijdelijk geblokkeerd. Wacht een moment voordat u het opnieuw probeert."
|
||||
},
|
||||
"app.skins.rate-limit.title": {
|
||||
"message": "Rustig aan!"
|
||||
},
|
||||
"app.skins.reorder-error.text": {
|
||||
"message": "Je skinvolgorde kon niet worden opgeslagen."
|
||||
},
|
||||
"app.skins.reorder-error.title": {
|
||||
"message": "Het herschikken van skins is mislukt."
|
||||
},
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
"app.skins.section.default-skins": {
|
||||
"message": "Standaardskins"
|
||||
},
|
||||
"app.skins.section.minecon-earth-2017": {
|
||||
"message": "MINECON Earth 2017"
|
||||
},
|
||||
"app.skins.section.modrinth": {
|
||||
"message": "Modrinth"
|
||||
},
|
||||
"app.skins.section.modrinth-pride": {
|
||||
"message": "Modrinth Pride"
|
||||
},
|
||||
"app.skins.section.modrinth-pride.tooltip": {
|
||||
"message": "U heeft deze skins ontvangen omdat u tijdens Pride Month heeft gedoneerd aan een Modrinth Pride-inzamelingsactie."
|
||||
},
|
||||
"app.skins.section.mounts-of-mayhem": {
|
||||
"message": "Mounts of Mayhem"
|
||||
},
|
||||
"app.skins.section.saved-skins": {
|
||||
"message": "Opgeslagen skins"
|
||||
},
|
||||
"app.skins.section.striding-hero": {
|
||||
"message": "Striding Hero"
|
||||
},
|
||||
"app.skins.section.the-copper-age": {
|
||||
"message": "The Copper Age"
|
||||
},
|
||||
"app.skins.section.the-garden-awakens": {
|
||||
"message": "The Garden Awakens"
|
||||
},
|
||||
"app.skins.section.tiny-takeover": {
|
||||
"message": "Tiny Takeover"
|
||||
},
|
||||
"app.skins.sign-in.button": {
|
||||
"message": "Inloggen"
|
||||
},
|
||||
"app.skins.sign-in.description": {
|
||||
"message": "Log in op je Minecraft-account om de skinbeheerfuncties van de Modrinth-app te gebruiken."
|
||||
},
|
||||
"app.skins.sign-in.rinthbot-alt": {
|
||||
"message": "Excited Modrinth Bot"
|
||||
},
|
||||
"app.skins.sign-in.title": {
|
||||
"message": "Log in"
|
||||
},
|
||||
"app.skins.title": {
|
||||
"message": "Skinkiezer"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} is klaar met downloaden. Herlaad om nu te updaten, of automatisch wanneer je de Modrinth App afsluit."
|
||||
},
|
||||
@@ -341,6 +512,9 @@
|
||||
"app.update-popup.download-complete": {
|
||||
"message": "Downloaden voltooid"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "Herladen om te updaten"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "Update beschikbaar"
|
||||
},
|
||||
@@ -539,6 +713,30 @@
|
||||
"instance.settings.tabs.general.name": {
|
||||
"message": "Naam"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel": {
|
||||
"message": "Updatekanaal"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha": {
|
||||
"message": "Alfa"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha.description": {
|
||||
"message": "Release-, beta- en alfaversies worden als beschikbare updates weergegeven."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta": {
|
||||
"message": "Beta"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta.description": {
|
||||
"message": "Release- en beta-versies worden als beschikbare updates weergegeven.\n"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release": {
|
||||
"message": "Release"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release.description": {
|
||||
"message": "Alleen releaseversies worden als beschikbare updates weergegeven."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.select": {
|
||||
"message": "Selecteer updatekanaal"
|
||||
},
|
||||
"instance.settings.tabs.hooks": {
|
||||
"message": "Opstart haakjes"
|
||||
},
|
||||
@@ -587,6 +785,24 @@
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java en geheugen"
|
||||
},
|
||||
"instance.settings.tabs.java.custom-environment-variables": {
|
||||
"message": "Aangepaste omgevingsvariabelen"
|
||||
},
|
||||
"instance.settings.tabs.java.custom-java-arguments": {
|
||||
"message": "Aangepaste Java-argumenten"
|
||||
},
|
||||
"instance.settings.tabs.java.custom-java-installation": {
|
||||
"message": "Aangepaste Java-installatie"
|
||||
},
|
||||
"instance.settings.tabs.java.custom-memory-allocation": {
|
||||
"message": "Aangepaste geheugentoewijzing"
|
||||
},
|
||||
"instance.settings.tabs.java.enter-environment-variables": {
|
||||
"message": "Voer omgevingsvariabelen in…"
|
||||
},
|
||||
"instance.settings.tabs.java.enter-java-arguments": {
|
||||
"message": "Voer Java-argumenten in…"
|
||||
},
|
||||
"instance.settings.tabs.java.environment-variables": {
|
||||
"message": "Environment variabelen"
|
||||
},
|
||||
@@ -602,6 +818,9 @@
|
||||
"instance.settings.tabs.java.java-memory": {
|
||||
"message": "Voorgeschreven geheugen"
|
||||
},
|
||||
"instance.settings.tabs.java.java-path-placeholder": {
|
||||
"message": "//pad/naar/java"
|
||||
},
|
||||
"instance.settings.tabs.window": {
|
||||
"message": "Venster"
|
||||
},
|
||||
|
||||
@@ -287,6 +287,9 @@
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Zainstaluj"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# mod} few {# mody} other {# modów}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Wymagana paczka modów"
|
||||
},
|
||||
@@ -542,6 +545,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "Dodaj znajomego"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} {count, plural, one {zaproszenie} few {zaproszenia} other {zaproszeń}} do znajomych"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Wyślij zaproszenie"
|
||||
},
|
||||
|
||||
@@ -290,6 +290,9 @@
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Instalar"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, =0 {Nenhum mod} one {# mod} other {# mods}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Pacote de mods necessário"
|
||||
},
|
||||
|
||||
@@ -275,6 +275,9 @@
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Установить"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# мод} few {# мода} other {# модов}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Необходимая сборка"
|
||||
},
|
||||
@@ -530,6 +533,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "Добавить в друзья"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} {count, plural, one {запрос} few {запроса} other {запросов}} дружбы"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Отправить запрос дружбы"
|
||||
},
|
||||
|
||||
@@ -74,6 +74,9 @@
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "Dölj namnskylt"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "Hoppa tillbaka i världar"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.title": {
|
||||
"message": "Minimera programstartare"
|
||||
},
|
||||
@@ -458,6 +461,9 @@
|
||||
"app.skins.sign-in.button": {
|
||||
"message": "Logga in"
|
||||
},
|
||||
"app.skins.sign-in.description": {
|
||||
"message": "Snälla logga in din Minecraft konto att använda hud hantering förmågor i Modrinth appen."
|
||||
},
|
||||
"app.skins.sign-in.rinthbot-alt": {
|
||||
"message": "Exalterad Modrinth bot"
|
||||
},
|
||||
|
||||
@@ -1,36 +1,45 @@
|
||||
{
|
||||
"app.action-bar.downloading-java": {
|
||||
"message": "ดาวน์โหลดเวอร์ชัน Java {version}"
|
||||
"message": "กำลังดาวน์โหลด Java {version}"
|
||||
},
|
||||
"app.action-bar.downloading-update": {
|
||||
"message": "กำลังดาวน์โหลดอัปเดต"
|
||||
},
|
||||
"app.action-bar.downloads": {
|
||||
"message": "ดาวน์โหลด"
|
||||
},
|
||||
"app.action-bar.hide-more-running-instances": {
|
||||
"message": "ซ่อนการดำเนินการโปรแกรมเบื้องหลัง"
|
||||
"message": "ซ่อนอินสแตนซ์ที่ทำงานอยู่เพิ่มเติม"
|
||||
},
|
||||
"app.action-bar.make-primary-instance": {
|
||||
"message": "กำหนดโปรแกรมหลัก"
|
||||
"message": "กำหนดอินสแตนซ์หลัก"
|
||||
},
|
||||
"app.action-bar.no-instances-running": {
|
||||
"message": "ไม่มีโปรแกรมใดดำเนินการ"
|
||||
"message": "ไม่มีอินสแตนซ์ที่กำลังทำงาน"
|
||||
},
|
||||
"app.action-bar.offline": {
|
||||
"message": "ออฟไลน์"
|
||||
},
|
||||
"app.action-bar.primary-instance": {
|
||||
"message": "โปรแกรมหลัก"
|
||||
"message": "อินสแตนซ์หลัก"
|
||||
},
|
||||
"app.action-bar.reload-to-update": {
|
||||
"message": "รีโหลดเพื่ออัปเดต"
|
||||
},
|
||||
"app.action-bar.show-more-running-instances": {
|
||||
"message": "แสดงการดำเนินการโปรแกรมเบื้องหลังเพิ่มเติม"
|
||||
"message": "แสดงอินสแตนซ์ที่ทำงานอยู่เพิ่มเติม"
|
||||
},
|
||||
"app.action-bar.stop-instance": {
|
||||
"message": "หยุดการทำงานโปรแกรม"
|
||||
"message": "หยุดอินสแตนซ์"
|
||||
},
|
||||
"app.action-bar.update": {
|
||||
"message": "อัปเดต"
|
||||
},
|
||||
"app.action-bar.view-active-downloads": {
|
||||
"message": "ดูยอดการดาวน์โหลดที่ยังใช้งาน"
|
||||
"message": "ดูการดาวน์โหลดที่กำลังดำเนินการอยู่"
|
||||
},
|
||||
"app.action-bar.view-instance": {
|
||||
"message": "ดูโปรแกรม"
|
||||
"message": "ดูอินสแตนซ์"
|
||||
},
|
||||
"app.action-bar.view-logs": {
|
||||
"message": "ดู Log"
|
||||
@@ -42,7 +51,7 @@
|
||||
"message": "การเรนเดอร์ขั้นสูง"
|
||||
},
|
||||
"app.appearance-settings.color-theme.description": {
|
||||
"message": "เลือกธีมสีที่คุณชื่นชอบสำหรับ Modrinth บนอุปกรณ์นี้"
|
||||
"message": "เลือกธีมสีที่คุณต้องการสำหรับ Modrinth App"
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "ธีมสี"
|
||||
@@ -54,22 +63,22 @@
|
||||
"message": "หน้าหลัก"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.library": {
|
||||
"message": "รายการ"
|
||||
"message": "ไลบรารี"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.title": {
|
||||
"message": "หน้าเริ่มต้น"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.description": {
|
||||
"message": "ปิดป้ายชื่อบนศีรษะของผู้เล่นในหน้าแสดงสกิน"
|
||||
"message": "ซ่อนป้ายชื่อบนศีรษะของผู้เล่นในหน้าแสดงสกิน"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "ซ่อนป้ายชื่อ"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "การแสดงผลโลกล่าสุดที่ผู้เล่นเล่นในส่วน \"กระโดดกลับเข้าไป\" ในหน้าหลัก"
|
||||
"message": "แสดงโลกที่เล่นล่าสุดในส่วน \"เล่นต่อ\" บนหน้าหลัก"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.title": {
|
||||
"message": "กระโดดกลับเข้าไปในโลก"
|
||||
"message": "เล่นต่อ"
|
||||
},
|
||||
"app.appearance-settings.minimize-launcher.description": {
|
||||
"message": "ย่อลันเชอร์เมื่อกระบวนการการรัน Minecraft เริ่มต้นแล้ว"
|
||||
@@ -78,13 +87,19 @@
|
||||
"message": "ย่อลันเชอร์"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.description": {
|
||||
"message": "ใช้ระบบกรอบหน้าต่าง (ต้องการการรีสตาร์ทโปรแกรมใหม่)"
|
||||
"message": "ใช้กรอบหน้าต่างระบบ (ต้องรีสตาร์ทแอป)"
|
||||
},
|
||||
"app.appearance-settings.native-decorations.title": {
|
||||
"message": "ของตกแต่งดั้งเดิม"
|
||||
},
|
||||
"app.appearance-settings.select-option": {
|
||||
"message": "เลือกตัวเลิือก"
|
||||
"message": "เลือกตัวเลือก"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "แสดงเวลาที่คุณใช้เล่นในแต่ละอินสแตนซ์"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "แสดงระยะเวลาที่เล่น"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "เปิดใช้งานตัวเลือกในการเลือกย่อหรือขยายแถบด้านข้าง"
|
||||
@@ -104,6 +119,12 @@
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "ไม่สามารถเชื่อมต่อถึงเซิร์ฟเวอร์ได้"
|
||||
},
|
||||
"app.browse.add-servers-to-instance": {
|
||||
"message": "เพิ่มเซิร์ฟเวอร์ลงในอินสแตนซ์"
|
||||
},
|
||||
"app.browse.add-to-an-instance": {
|
||||
"message": "เพิ่มลงในอินสแตนซ์"
|
||||
},
|
||||
"app.browse.add-to-instance": {
|
||||
"message": "เพิ่มลงในโปรแกรม"
|
||||
},
|
||||
@@ -116,6 +137,9 @@
|
||||
"app.browse.already-added": {
|
||||
"message": "เพิ่มแล้ว"
|
||||
},
|
||||
"app.browse.back-to-instance": {
|
||||
"message": "กลับสู่อินสแตนซ์"
|
||||
},
|
||||
"app.browse.discover-content": {
|
||||
"message": "สำรวจเนื้อหา"
|
||||
},
|
||||
@@ -128,9 +152,15 @@
|
||||
"app.browse.project-type.modpacks": {
|
||||
"message": "แพ็กม็อด"
|
||||
},
|
||||
"app.browse.server-instance-content-warning": {
|
||||
"message": "การเพิ่มเนื้อหาอาจทำให้ใช้งานร่วมกันไม่ได้เมื่อเข้าร่วมเซิร์ฟเวอร์ เนื้อหาที่เพิ่มเข้ามาจะหายไปเมื่อคุณอัปเดตอินสแตนซ์ของเซิร์ฟเวอร์"
|
||||
},
|
||||
"app.browse.server.installing": {
|
||||
"message": "กำลังติดตั้ง"
|
||||
},
|
||||
"app.content-install.no-compatible-versions": {
|
||||
"message": "ไม่มีเวอร์ชันที่เข้ากันได้ {compatibilityLabel} โปรดเลือกเวอร์ชันที่จะติดตั้ง ไฟล์ที่จำเป็นจะไม่ถูกติดตั้งโดยอัตโนมัติ"
|
||||
},
|
||||
"app.creation-modal.installing-modpack.description": {
|
||||
"message": "{fileName}"
|
||||
},
|
||||
@@ -260,6 +290,9 @@
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "ติดตั้ง"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, other {# ม็อด}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "มอดแพ็กที่จำเป็น"
|
||||
},
|
||||
@@ -284,6 +317,15 @@
|
||||
"app.modal.update-to-play.update-required-description": {
|
||||
"message": "จำเป็นต้องอัปเดตเพื่อเล่น {name} กรุณาอัปเดตเป็นเวอร์ชันล่าสุดเพื่อเปิดเกม"
|
||||
},
|
||||
"app.project.install-button.already-installed": {
|
||||
"message": "โปรเจคนี้ถูกติดตั้งแล้ว"
|
||||
},
|
||||
"app.project.install-context.back-to-browse": {
|
||||
"message": "กลับไปที่หน้าค้นหา"
|
||||
},
|
||||
"app.project.install-context.install-content-to-instance": {
|
||||
"message": "ติดตั้งเนื้อหาลงสู่อินสแตนซ์"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "โหมดนักพัฒนาเปิดอยู่"
|
||||
},
|
||||
@@ -308,6 +350,150 @@
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "การจัดการทรัพยากร"
|
||||
},
|
||||
"app.skins.add-button": {
|
||||
"message": "เพิ่มสกิน"
|
||||
},
|
||||
"app.skins.add-button.drag-and-drop": {
|
||||
"message": "ลากและวาง"
|
||||
},
|
||||
"app.skins.apply-button": {
|
||||
"message": "นำไปใช้"
|
||||
},
|
||||
"app.skins.delete-button": {
|
||||
"message": "ลบสกิน"
|
||||
},
|
||||
"app.skins.delete-modal.description": {
|
||||
"message": "การดำเนินการนี้จะลบสกินที่เลือกอย่างถาวร การกระทำนี้ไม่สามารถย้อนกลับได้"
|
||||
},
|
||||
"app.skins.delete-modal.title": {
|
||||
"message": "คุณแน่ใจหรือว่าต้องการที่จะลบสกินนี้?"
|
||||
},
|
||||
"app.skins.dropped-file-error.text": {
|
||||
"message": "ไม่สามารถอ่านไฟล์ที่ถูกลากและวางได้"
|
||||
},
|
||||
"app.skins.dropped-file-error.title": {
|
||||
"message": "ข้อผิดพลาดในการประมวลผลไฟล์"
|
||||
},
|
||||
"app.skins.edit-button": {
|
||||
"message": "แก้ไขสกิน"
|
||||
},
|
||||
"app.skins.modal.add-skin-button": {
|
||||
"message": "เพิ่มสกิน"
|
||||
},
|
||||
"app.skins.modal.add-title": {
|
||||
"message": "การเพิ่มสกิน"
|
||||
},
|
||||
"app.skins.modal.arm-style-section": {
|
||||
"message": "สไตล์แขน"
|
||||
},
|
||||
"app.skins.modal.arm-style-slim": {
|
||||
"message": "เพรียว"
|
||||
},
|
||||
"app.skins.modal.arm-style-wide": {
|
||||
"message": "กว้าง"
|
||||
},
|
||||
"app.skins.modal.cape-fallback-name": {
|
||||
"message": "ผ้าคลุม"
|
||||
},
|
||||
"app.skins.modal.cape-section": {
|
||||
"message": "ผ้าคลุม"
|
||||
},
|
||||
"app.skins.modal.edit-title": {
|
||||
"message": "แก้ไขสกิน"
|
||||
},
|
||||
"app.skins.modal.make-edit-first-tooltip": {
|
||||
"message": "แก้ไขสกินก่อน!"
|
||||
},
|
||||
"app.skins.modal.no-cape-tooltip": {
|
||||
"message": "ไม่มีผ้าคลุม"
|
||||
},
|
||||
"app.skins.modal.none-cape-option": {
|
||||
"message": "ไม่มี"
|
||||
},
|
||||
"app.skins.modal.replace-texture-button": {
|
||||
"message": "เปลี่ยนเท็กซ์เจอร์"
|
||||
},
|
||||
"app.skins.modal.save-skin-button": {
|
||||
"message": "บันทึกสกิน"
|
||||
},
|
||||
"app.skins.modal.saving-tooltip": {
|
||||
"message": "กำลังบันทึก"
|
||||
},
|
||||
"app.skins.modal.texture-section": {
|
||||
"message": "เท็กซ์เจอร์"
|
||||
},
|
||||
"app.skins.modal.upload-skin-first-tooltip": {
|
||||
"message": "อัพโหลดสกินก่อน!"
|
||||
},
|
||||
"app.skins.preview.edit-button": {
|
||||
"message": "แก้ไขสกิน"
|
||||
},
|
||||
"app.skins.previewing-badge": {
|
||||
"message": "การแสดงตัวอย่าง"
|
||||
},
|
||||
"app.skins.rate-limit.text": {
|
||||
"message": "คุณได้เปลี่ยนสกินบ่อยเกินไป เซิร์ฟเวอร์ของ Mojang ได้บล็อกคำขอเพิ่มเติมชั่วคราว โปรดรอสักครู่ก่อนลองอีกครั้ง"
|
||||
},
|
||||
"app.skins.rate-limit.title": {
|
||||
"message": "ลดความถี่ลง!"
|
||||
},
|
||||
"app.skins.reorder-error.text": {
|
||||
"message": "ไม่สามารถบันทึกลำดับสกินของคุณได้"
|
||||
},
|
||||
"app.skins.reorder-error.title": {
|
||||
"message": "ไม่สามารถจัดเรียงสกินได้"
|
||||
},
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
"app.skins.section.chase-the-skies": {
|
||||
"message": "Chase the Skies"
|
||||
},
|
||||
"app.skins.section.default-skins": {
|
||||
"message": "สกินเริ่มต้น"
|
||||
},
|
||||
"app.skins.section.minecon-earth-2017": {
|
||||
"message": "MINECON Earth 2017"
|
||||
},
|
||||
"app.skins.section.modrinth": {
|
||||
"message": "Modrinth"
|
||||
},
|
||||
"app.skins.section.modrinth-pride": {
|
||||
"message": "Modrinth Pride"
|
||||
},
|
||||
"app.skins.section.modrinth-pride.tooltip": {
|
||||
"message": "คุณได้รับสกินเหล่านี้จากการร่วมบริจาคให้กับกิจกรรมระดมทุน Modrinth Pride ในช่วงเดือน Pride Month"
|
||||
},
|
||||
"app.skins.section.mounts-of-mayhem": {
|
||||
"message": "Mounts of Mayhem"
|
||||
},
|
||||
"app.skins.section.saved-skins": {
|
||||
"message": "สกินที่บันทึกไว้"
|
||||
},
|
||||
"app.skins.section.striding-hero": {
|
||||
"message": "Striding Hero"
|
||||
},
|
||||
"app.skins.section.the-copper-age": {
|
||||
"message": "The Copper Age"
|
||||
},
|
||||
"app.skins.section.the-garden-awakens": {
|
||||
"message": "The Garden Awakens"
|
||||
},
|
||||
"app.skins.section.tiny-takeover": {
|
||||
"message": "Tiny Takeover"
|
||||
},
|
||||
"app.skins.sign-in.button": {
|
||||
"message": "ลงชื่อเข้าใช้"
|
||||
},
|
||||
"app.skins.sign-in.description": {
|
||||
"message": "โปรดลงชื่อเข้าใช้บัญชี Minecraft ของคุณเพื่อใช้งานฟีเจอร์จัดการสกินของแอป Modrinth"
|
||||
},
|
||||
"app.skins.sign-in.rinthbot-alt": {
|
||||
"message": "บอท Modrinth ที่กำลังตื่นเต้น"
|
||||
},
|
||||
"app.skins.sign-in.title": {
|
||||
"message": "โปรดลงชื่อเข้าใช้"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "ดาวน์โหลด Modrinth v{version} สำเร็จแล้ว เปิดโปรแกรมใหม่อีกครั้งเพื่ออัปเดตตอนนี้ หรือจะรออัปเดตอัตโนมัติ ซึ่งจะเกิดขึ้นเมื่อคุณกดปิดโปรแกรม Modrinth"
|
||||
},
|
||||
@@ -356,6 +542,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "เพิ่มเพื่อน"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "คำขอเป็นเพื่อน {count} {count, plural, other {คน}}"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "ส่งคำขอเป็นเพื่อน"
|
||||
},
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"message": "Kurulumu durdur"
|
||||
},
|
||||
"app.action-bar.update": {
|
||||
"message": "Güncelle"
|
||||
"message": "Güncelleme"
|
||||
},
|
||||
"app.action-bar.view-active-downloads": {
|
||||
"message": "Şu anda indirilienleri göster"
|
||||
@@ -54,7 +54,7 @@
|
||||
"message": "Modrinth App için tercih ettiğiniz temayı seçin."
|
||||
},
|
||||
"app.appearance-settings.color-theme.title": {
|
||||
"message": "Tema"
|
||||
"message": "Tema Rengi"
|
||||
},
|
||||
"app.appearance-settings.default-landing-page.description": {
|
||||
"message": "Launcher açıldığında varsayılan olarak açılacak sayfayı seçin."
|
||||
@@ -144,7 +144,7 @@
|
||||
"message": "İçerik keşfet"
|
||||
},
|
||||
"app.browse.discover-servers": {
|
||||
"message": "Sunucu keşfet"
|
||||
"message": "Sunucuları keşfet"
|
||||
},
|
||||
"app.browse.hide-added-servers": {
|
||||
"message": "Zaten eklenmiş sunucuları gizle"
|
||||
@@ -548,6 +548,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "Bir arkadaş ekle"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} arkadaşlık isteği"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Arkadaşlık isteği gönder"
|
||||
},
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
"app.action-bar.downloading-java": {
|
||||
"message": "Завантаження Java {version}"
|
||||
},
|
||||
"app.action-bar.downloading-update": {
|
||||
"message": "Завантаження оновлення"
|
||||
},
|
||||
"app.action-bar.downloads": {
|
||||
"message": "Завантаження"
|
||||
},
|
||||
@@ -20,12 +23,18 @@
|
||||
"app.action-bar.primary-instance": {
|
||||
"message": "Основний профіль"
|
||||
},
|
||||
"app.action-bar.reload-to-update": {
|
||||
"message": "Перезавантаження для оновлення"
|
||||
},
|
||||
"app.action-bar.show-more-running-instances": {
|
||||
"message": "Показати більше запущених профілів"
|
||||
},
|
||||
"app.action-bar.stop-instance": {
|
||||
"message": "Зупинити профіль"
|
||||
},
|
||||
"app.action-bar.update": {
|
||||
"message": "Оновлення"
|
||||
},
|
||||
"app.action-bar.view-active-downloads": {
|
||||
"message": "Переглянути активні завантаження"
|
||||
},
|
||||
@@ -272,6 +281,9 @@
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Установити"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, one {# мод} few {# мода} other {# модів}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Потрібна збірка"
|
||||
},
|
||||
@@ -416,6 +428,12 @@
|
||||
"app.skins.rate-limit.title": {
|
||||
"message": "Повільніше!"
|
||||
},
|
||||
"app.skins.reorder-error.text": {
|
||||
"message": "Ваше замовлення скінів не вдалося зберегти."
|
||||
},
|
||||
"app.skins.reorder-error.title": {
|
||||
"message": "Не вдалося змінити порядок скінів"
|
||||
},
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
@@ -488,6 +506,9 @@
|
||||
"app.update-popup.download-complete": {
|
||||
"message": "Завантаження завершено"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "Перезавантаження для оновлення"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "Доступне оновлення"
|
||||
},
|
||||
@@ -518,6 +539,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "Додати друга"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} запит{count, plural, one { у} few {и в} many {ів у} other {у в}} друзі"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Надіслати запит у друзі"
|
||||
},
|
||||
@@ -683,6 +707,30 @@
|
||||
"instance.settings.tabs.general.name": {
|
||||
"message": "Назва"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel": {
|
||||
"message": "Випуск оновлення"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha": {
|
||||
"message": "Альфа"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha.description": {
|
||||
"message": "Випуски, бета- та альфа-версії будуть показуватися як доступні оновлення."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta": {
|
||||
"message": "Бета"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta.description": {
|
||||
"message": "Випуски та бета-версії будуть показуватися як доступні оновлення."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release": {
|
||||
"message": "Випуск"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release.description": {
|
||||
"message": "Тільки випуски версії будуть показуватися як доступні оновлення."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.select": {
|
||||
"message": "Оберіть випуск оновлення"
|
||||
},
|
||||
"instance.settings.tabs.hooks": {
|
||||
"message": "Гуки запуску"
|
||||
},
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
"app.action-bar.downloading-java": {
|
||||
"message": "Đang tải xuống Java {version}"
|
||||
},
|
||||
"app.action-bar.downloading-update": {
|
||||
"message": "Đang tải xuống bản cập nhật"
|
||||
},
|
||||
"app.action-bar.downloads": {
|
||||
"message": "Tải xuống"
|
||||
},
|
||||
@@ -20,12 +23,18 @@
|
||||
"app.action-bar.primary-instance": {
|
||||
"message": "Bản instance chính"
|
||||
},
|
||||
"app.action-bar.reload-to-update": {
|
||||
"message": "Tải lại để cập nhật"
|
||||
},
|
||||
"app.action-bar.show-more-running-instances": {
|
||||
"message": "Hiện thêm các phiên bản đang chạy"
|
||||
},
|
||||
"app.action-bar.stop-instance": {
|
||||
"message": "Dừng instance"
|
||||
},
|
||||
"app.action-bar.update": {
|
||||
"message": "Cập nhật"
|
||||
},
|
||||
"app.action-bar.view-active-downloads": {
|
||||
"message": "Xem các lượt tải xuống"
|
||||
},
|
||||
@@ -149,6 +158,9 @@
|
||||
"app.browse.server.installing": {
|
||||
"message": "Đang cài đặt"
|
||||
},
|
||||
"app.content-install.no-compatible-versions": {
|
||||
"message": "Không có phiên bản nào phù hợp với {compatibilityLabel}. Nếu vẫn chọn một phiên bản để cài đặt, các gói phụ thuộc sẽ không được tải tự động."
|
||||
},
|
||||
"app.creation-modal.installing-modpack.description": {
|
||||
"message": "{fileName}"
|
||||
},
|
||||
@@ -278,6 +290,9 @@
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "Tải xuống"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, other {# mod}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "Yêu cầu modpack"
|
||||
},
|
||||
@@ -422,6 +437,12 @@
|
||||
"app.skins.rate-limit.title": {
|
||||
"message": "Bình tĩnh lại!"
|
||||
},
|
||||
"app.skins.reorder-error.text": {
|
||||
"message": "Không thể lưu thứ tự skin của bạn."
|
||||
},
|
||||
"app.skins.reorder-error.title": {
|
||||
"message": "Sắp xếp lại skin thất bại"
|
||||
},
|
||||
"app.skins.section.builders-and-biomes": {
|
||||
"message": "Builders & Biomes"
|
||||
},
|
||||
@@ -494,6 +515,9 @@
|
||||
"app.update-popup.download-complete": {
|
||||
"message": "Cài đặt thành công"
|
||||
},
|
||||
"app.update-popup.reload": {
|
||||
"message": "Tải lại để cập nhật"
|
||||
},
|
||||
"app.update-popup.title": {
|
||||
"message": "Cập nhật mới hiện đang khả dụng"
|
||||
},
|
||||
@@ -524,6 +548,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "Thêm một người bạn"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} {count, plural, other {yêu cầu kết bạn}}"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Gửi yêu cầu kết bạn"
|
||||
},
|
||||
@@ -689,6 +716,30 @@
|
||||
"instance.settings.tabs.general.name": {
|
||||
"message": "Tên"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel": {
|
||||
"message": "Kênh cập nhật"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha": {
|
||||
"message": "Sơ khai"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.alpha.description": {
|
||||
"message": "Các phiên bản chính thức, thử nghiệm và sơ khai sẽ hiển thị trong danh sách cập nhật có sẵn."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta": {
|
||||
"message": "Thử nghiệm"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.beta.description": {
|
||||
"message": "Các phiên bản chính thức và thử nghiệm sẽ hiển thị trong danh sách cập nhật có sẵn."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release": {
|
||||
"message": "Chính thức"
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.release.description": {
|
||||
"message": "Chỉ phiên bản chính thức sẽ hiển thị trong danh sách cập nhật có sẵn."
|
||||
},
|
||||
"instance.settings.tabs.general.update-channel.select": {
|
||||
"message": "Chọn kênh cập nhật"
|
||||
},
|
||||
"instance.settings.tabs.hooks": {
|
||||
"message": "Khởi chạy Hooks"
|
||||
},
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
"message": "在皮肤页面中禁用你玩家头顶上的名牌。"
|
||||
},
|
||||
"app.appearance-settings.hide-nametag.title": {
|
||||
"message": "隐藏名称标签"
|
||||
"message": "隐藏名牌"
|
||||
},
|
||||
"app.appearance-settings.jump-back-into-worlds.description": {
|
||||
"message": "在主页的“快速回到”部分包含最近的世界。"
|
||||
@@ -153,7 +153,7 @@
|
||||
"message": "整合包"
|
||||
},
|
||||
"app.browse.server-instance-content-warning": {
|
||||
"message": "加入服务器时,添加内容可能会破坏兼容性。当更新服务器实例内容时任何添加的内容也将丢失。"
|
||||
"message": "加入服务器时,添加内容可能会破坏兼容性。当更新服务器实例内容时,任何添加的内容也将丢失。"
|
||||
},
|
||||
"app.browse.server.installing": {
|
||||
"message": "安装中"
|
||||
@@ -281,6 +281,9 @@
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "安装"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count} 个模组"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "需求整合包"
|
||||
},
|
||||
@@ -536,6 +539,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "添加好友"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} 个好友请求"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "发送好友请求"
|
||||
},
|
||||
|
||||
@@ -96,10 +96,10 @@
|
||||
"message": "選擇選項"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.description": {
|
||||
"message": "顯示你在該實例的遊玩時間。"
|
||||
"message": "顯示你在該實例的遊玩時數。"
|
||||
},
|
||||
"app.appearance-settings.show-play-time.title": {
|
||||
"message": "顯示遊玩時間"
|
||||
"message": "顯示遊玩時數"
|
||||
},
|
||||
"app.appearance-settings.toggle-sidebar.description": {
|
||||
"message": "啟用切換側邊欄的功能。"
|
||||
@@ -281,6 +281,9 @@
|
||||
"app.modal.install-to-play.install-button": {
|
||||
"message": "安裝"
|
||||
},
|
||||
"app.modal.install-to-play.mod-count": {
|
||||
"message": "{count, plural, other {# 個模組}}"
|
||||
},
|
||||
"app.modal.install-to-play.required-modpack": {
|
||||
"message": "所需模組包"
|
||||
},
|
||||
@@ -483,7 +486,7 @@
|
||||
"message": "請登入"
|
||||
},
|
||||
"app.skins.title": {
|
||||
"message": "外觀選擇"
|
||||
"message": "外觀選擇工具"
|
||||
},
|
||||
"app.update-popup.body.download-complete": {
|
||||
"message": "Modrinth App v{version} 已完成下載!立即重新載入以更新,或在關閉 Modrinth App 時自動更新。"
|
||||
@@ -536,6 +539,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "新增好友"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} 個好友{count, plural, other {邀請}}"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "送出好友邀請"
|
||||
},
|
||||
@@ -786,10 +792,10 @@
|
||||
"message": "自訂記憶體分配"
|
||||
},
|
||||
"instance.settings.tabs.java.enter-environment-variables": {
|
||||
"message": "輸入環境變數……"
|
||||
"message": "輸入環境變數..."
|
||||
},
|
||||
"instance.settings.tabs.java.enter-java-arguments": {
|
||||
"message": "輸入 Java 參數……"
|
||||
"message": "輸入 Java 參數..."
|
||||
},
|
||||
"instance.settings.tabs.java.environment-variables": {
|
||||
"message": "環境變數"
|
||||
|
||||
@@ -432,6 +432,20 @@ components:
|
||||
primary_file:
|
||||
type: string
|
||||
description: The multipart field name of the primary file
|
||||
environment:
|
||||
type: string
|
||||
enum:
|
||||
- client_and_server
|
||||
- client_only
|
||||
- client_only_server_optional
|
||||
- singleplayer_only
|
||||
- server_only
|
||||
- server_only_client_optional
|
||||
- dedicated_server_only
|
||||
- client_or_server
|
||||
- client_or_server_prefers_both
|
||||
- unknown
|
||||
description: The environment that this version is for.
|
||||
required:
|
||||
- file_parts
|
||||
- project_id
|
||||
|
||||
@@ -756,16 +756,16 @@ svg.inline-svg {
|
||||
padding: var(--gap-16);
|
||||
|
||||
h2 {
|
||||
@apply font-semibold;
|
||||
font-size: var(--text-18);
|
||||
font-weight: var(--weight-extrabold);
|
||||
color: var(--color-contrast);
|
||||
line-height: initial;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
h3 {
|
||||
@apply font-semibold;
|
||||
font-size: var(--text-16);
|
||||
font-weight: var(--weight-bold);
|
||||
color: var(--color-base);
|
||||
margin: 0;
|
||||
}
|
||||
@@ -812,6 +812,7 @@ svg.inline-svg {
|
||||
}
|
||||
|
||||
.details-list__item {
|
||||
@apply font-normal;
|
||||
@extend .iconified-list-item;
|
||||
|
||||
.details-list__item__text--style-secondary {
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@
|
||||
class="inline-flex items-center"
|
||||
>
|
||||
<button
|
||||
v-tooltip="legendEntry.projectName ?? ''"
|
||||
v-tooltip="legendEntry.tooltip ?? legendEntry.projectName ?? ''"
|
||||
type="button"
|
||||
class="inline-flex items-center gap-1.5 px-2 py-0.5 text-sm !outline-0 transition-all focus-within:!outline-0 focus:!outline-0 focus-visible:!outline-0"
|
||||
:class="[
|
||||
|
||||
+4
-1
@@ -64,6 +64,7 @@ export function useAnalyticsChartLegend({
|
||||
id: dataset.projectId,
|
||||
name: dataset.label,
|
||||
projectName: dataset.projectName,
|
||||
tooltip: dataset.tooltip,
|
||||
color: dataset.borderColor,
|
||||
totalValue: getChartDatasetTotal(dataset),
|
||||
hidden: hiddenDatasetIds.value.has(dataset.projectId),
|
||||
@@ -118,6 +119,7 @@ export function useAnalyticsChartLegend({
|
||||
id: getPreviousPeriodDatasetId(entry.id),
|
||||
name: formatMessage(analyticsChartMessages.previousPeriodSuffix, { name: entry.name }),
|
||||
projectName: entry.projectName,
|
||||
tooltip: entry.tooltip,
|
||||
color: entry.color,
|
||||
totalValue: previousDataset ? getChartDatasetTotal(previousDataset) : 0,
|
||||
hidden: hiddenDatasetIds.value.has(getPreviousPeriodDatasetId(entry.id)),
|
||||
@@ -153,6 +155,7 @@ export function useAnalyticsChartLegend({
|
||||
name: dataset.label,
|
||||
}),
|
||||
projectName: dataset.projectName,
|
||||
tooltip: dataset.tooltip,
|
||||
data: previousData,
|
||||
borderColor: dataset.borderColor,
|
||||
backgroundColor: dataset.backgroundColor,
|
||||
@@ -296,7 +299,7 @@ export function useAnalyticsChartLegend({
|
||||
}
|
||||
|
||||
function getLegendEntryTooltip(legendEntry: AnalyticsChartLegendEntry) {
|
||||
return legendEntry.projectName ?? ''
|
||||
return legendEntry.tooltip ?? legendEntry.projectName ?? ''
|
||||
}
|
||||
|
||||
function isUnmonetizedLegendEntry(legendEntry: AnalyticsChartLegendEntry) {
|
||||
|
||||
+2
-1
@@ -97,7 +97,7 @@
|
||||
"
|
||||
/>
|
||||
<span
|
||||
v-tooltip="entry.projectName ?? ''"
|
||||
v-tooltip="entry.tooltip ?? entry.projectName ?? ''"
|
||||
class="min-w-0 truncate"
|
||||
:class="{
|
||||
'line-through': entry.hidden,
|
||||
@@ -145,6 +145,7 @@ export type AnalyticsChartTooltipEntry = {
|
||||
projectId: string
|
||||
name: string
|
||||
projectName?: string
|
||||
tooltip?: string
|
||||
color: string
|
||||
formattedValue: string
|
||||
hidden: boolean
|
||||
|
||||
+1
@@ -208,6 +208,7 @@ const hoverEntries = computed(() => {
|
||||
projectId: legendEntry.id,
|
||||
name: legendEntry.name,
|
||||
projectName: legendEntry.projectName,
|
||||
tooltip: legendEntry.tooltip,
|
||||
color: legendEntry.color,
|
||||
formattedValue: props.isRatioMode
|
||||
? `${ratioValue.toFixed(1)}%`
|
||||
|
||||
+1
@@ -14,6 +14,7 @@ export type AnalyticsChartLegendEntry = {
|
||||
id: string
|
||||
name: string
|
||||
projectName?: string
|
||||
tooltip?: string
|
||||
color: string
|
||||
totalValue: number
|
||||
hidden: boolean
|
||||
|
||||
+192
-26
@@ -1,20 +1,24 @@
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
|
||||
import type {
|
||||
AnalyticsBreakdownPreset,
|
||||
AnalyticsDashboardProject,
|
||||
AnalyticsDashboardStat,
|
||||
AnalyticsGroupByPreset,
|
||||
import {
|
||||
type AnalyticsBreakdownPreset,
|
||||
type AnalyticsDashboardProject,
|
||||
type AnalyticsDashboardStat,
|
||||
type AnalyticsGroupByPreset,
|
||||
type AnalyticsSelectedFilters,
|
||||
doesAnalyticsPointMatchNormalizedFilters,
|
||||
normalizeAnalyticsSelectedFilters,
|
||||
} from '~/providers/analytics/analytics'
|
||||
|
||||
import type { FormatMessage } from '../analytics-messages'
|
||||
import {
|
||||
analyticsChartMessages,
|
||||
analyticsMessages,
|
||||
analyticsStatCardMessages,
|
||||
formatAnalyticsDependentProjectFallbackLabel,
|
||||
formatAnalyticsDownloadReasonLabel,
|
||||
formatAnalyticsLoaderLabel,
|
||||
formatAnalyticsMonetizationLabel,
|
||||
type FormatMessage,
|
||||
} from '../analytics-messages'
|
||||
import {
|
||||
ALL_BREAKDOWN_VALUE,
|
||||
@@ -22,6 +26,8 @@ import {
|
||||
getAnalyticsBreakdownDatasetId,
|
||||
getAnalyticsBreakdownKey,
|
||||
getAnalyticsBreakdownValues,
|
||||
isNoDependentAnalyticsBreakdownValue,
|
||||
isUnknownAnalyticsBreakdownValue,
|
||||
UNKNOWN_BREAKDOWN_VALUE,
|
||||
} from '../breakdown'
|
||||
import { PREVIOUS_PERIOD_DATASET_ID_PREFIX } from './analytics-chart-constants'
|
||||
@@ -30,6 +36,7 @@ export type ChartDataset = {
|
||||
projectId: string
|
||||
label: string
|
||||
projectName?: string
|
||||
tooltip?: string
|
||||
data: number[]
|
||||
borderColor: string
|
||||
backgroundColor: string
|
||||
@@ -136,6 +143,7 @@ export function formatBreakdownLabel(
|
||||
breakdownValue: string,
|
||||
selectedBreakdown: AnalyticsBreakdownPreset,
|
||||
getVersionDisplayName: ((versionId: string) => string) | undefined,
|
||||
userNamesById: ReadonlyMap<string, string> | undefined,
|
||||
formatMessage: FormatMessage,
|
||||
): string {
|
||||
const normalizedValue = breakdownValue.trim()
|
||||
@@ -160,6 +168,15 @@ export function formatBreakdownLabel(
|
||||
if (selectedBreakdown === 'download_reason') {
|
||||
return formatAnalyticsDownloadReasonLabel(normalizedLowercaseValue, formatMessage)
|
||||
}
|
||||
if (selectedBreakdown === 'dependent_project_download') {
|
||||
if (isNoDependentAnalyticsBreakdownValue(breakdownValue)) {
|
||||
return formatMessage(analyticsMessages.noDependent)
|
||||
}
|
||||
return breakdownValue
|
||||
}
|
||||
if (selectedBreakdown === 'user_id') {
|
||||
return userNamesById?.get(breakdownValue) ?? breakdownValue
|
||||
}
|
||||
if (selectedBreakdown === 'version_id') {
|
||||
return getVersionDisplayName?.(breakdownValue) ?? breakdownValue
|
||||
}
|
||||
@@ -174,19 +191,34 @@ export function formatBreakdownLabels(
|
||||
breakdownValues: readonly string[],
|
||||
selectedBreakdowns: readonly AnalyticsBreakdownPreset[],
|
||||
getVersionDisplayName: ((versionId: string) => string) | undefined,
|
||||
userNamesById: ReadonlyMap<string, string> | undefined,
|
||||
formatMessage: FormatMessage,
|
||||
): string {
|
||||
const normalizedBreakdowns = selectedBreakdowns.filter((breakdown) => breakdown !== 'none')
|
||||
const downloadReasonBreakdownIndex = normalizedBreakdowns.indexOf('download_reason')
|
||||
|
||||
return collapseRepeatedUnknownBreakdownLabels(
|
||||
selectedBreakdowns
|
||||
.filter((breakdown) => breakdown !== 'none')
|
||||
.map((breakdown, index) =>
|
||||
formatBreakdownLabel(
|
||||
breakdownValues[index] ?? '',
|
||||
breakdown,
|
||||
getVersionDisplayName,
|
||||
normalizedBreakdowns.map((breakdown, index) => {
|
||||
const breakdownValue = breakdownValues[index] ?? ''
|
||||
if (
|
||||
breakdown === 'dependent_project_download' &&
|
||||
downloadReasonBreakdownIndex !== -1 &&
|
||||
isUnknownAnalyticsBreakdownValue(breakdownValue)
|
||||
) {
|
||||
return formatAnalyticsDependentProjectFallbackLabel(
|
||||
breakdownValues[downloadReasonBreakdownIndex],
|
||||
formatMessage,
|
||||
),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
return formatBreakdownLabel(
|
||||
breakdownValue,
|
||||
breakdown,
|
||||
getVersionDisplayName,
|
||||
userNamesById,
|
||||
formatMessage,
|
||||
)
|
||||
}),
|
||||
formatMessage,
|
||||
).join(COMBINED_BREAKDOWN_LABEL_SEPARATOR)
|
||||
}
|
||||
@@ -258,6 +290,33 @@ type PaletteRankEntry = {
|
||||
total: number
|
||||
}
|
||||
|
||||
function formatDatasetTooltip(projectName: string | undefined): string | undefined {
|
||||
return projectName
|
||||
}
|
||||
|
||||
function formatDependentProjectDatasetTooltip(
|
||||
versionName: string | undefined,
|
||||
dependentProjectName: string | undefined,
|
||||
dependencyProjectNames: readonly string[],
|
||||
formatMessage: FormatMessage,
|
||||
): string | undefined {
|
||||
if (dependencyProjectNames.length === 0) {
|
||||
return undefined
|
||||
}
|
||||
|
||||
if (versionName && dependentProjectName) {
|
||||
return formatMessage(analyticsChartMessages.dependentProjectVersionTooltip, {
|
||||
dependentProject: dependentProjectName,
|
||||
dependencyProject: dependencyProjectNames.join(', '),
|
||||
version: versionName,
|
||||
})
|
||||
}
|
||||
|
||||
return formatMessage(analyticsChartMessages.dependentOnProjectTooltip, {
|
||||
project: dependencyProjectNames.join(', '),
|
||||
})
|
||||
}
|
||||
|
||||
function getPaletteColorForIndex(index: number, palette: string[]): string {
|
||||
if (palette.length === 0) return ''
|
||||
|
||||
@@ -320,6 +379,10 @@ export function buildChartDatasets(
|
||||
activeStat: AnalyticsDashboardStat,
|
||||
palette: string[],
|
||||
selectedBreakdowns: readonly AnalyticsBreakdownPreset[],
|
||||
selectedFilters: AnalyticsSelectedFilters,
|
||||
dependentProjectTypesById: ReadonlyMap<string, readonly string[]>,
|
||||
projectNamesById: ReadonlyMap<string, string>,
|
||||
userNamesById: ReadonlyMap<string, string>,
|
||||
getVersionDisplayName: ((versionId: string) => string) | undefined,
|
||||
getVersionProjectName: ((versionId: string) => string | undefined) | undefined,
|
||||
formatMessage: FormatMessage,
|
||||
@@ -332,17 +395,43 @@ export function buildChartDatasets(
|
||||
|
||||
const dataLength = Math.max(sliceCount, timeSlices.length)
|
||||
const normalizedBreakdowns = selectedBreakdowns.filter((breakdown) => breakdown !== 'none')
|
||||
const projectNamesById = new Map(selectedProjects.map((project) => [project.id, project.name]))
|
||||
const normalizedFilters = normalizeAnalyticsSelectedFilters(selectedFilters)
|
||||
|
||||
function formatChartBreakdownLabels(breakdownValues: readonly string[]): string {
|
||||
const downloadReasonBreakdownIndex = normalizedBreakdowns.indexOf('download_reason')
|
||||
|
||||
return collapseRepeatedUnknownBreakdownLabels(
|
||||
normalizedBreakdowns.map((breakdown, index) => {
|
||||
const breakdownValue = breakdownValues[index] ?? ''
|
||||
if (breakdown === 'project') {
|
||||
if (breakdown === 'project' || breakdown === 'dependent_project_download') {
|
||||
if (
|
||||
breakdown === 'dependent_project_download' &&
|
||||
isNoDependentAnalyticsBreakdownValue(breakdownValue)
|
||||
) {
|
||||
return formatMessage(analyticsMessages.noDependent)
|
||||
}
|
||||
if (
|
||||
breakdown === 'dependent_project_download' &&
|
||||
isUnknownAnalyticsBreakdownValue(breakdownValue)
|
||||
) {
|
||||
return downloadReasonBreakdownIndex === -1
|
||||
? formatMessage(analyticsMessages.unknown)
|
||||
: formatAnalyticsDependentProjectFallbackLabel(
|
||||
breakdownValues[downloadReasonBreakdownIndex],
|
||||
formatMessage,
|
||||
)
|
||||
}
|
||||
|
||||
return projectNamesById.get(breakdownValue) ?? breakdownValue
|
||||
}
|
||||
|
||||
return formatBreakdownLabel(breakdownValue, breakdown, getVersionDisplayName, formatMessage)
|
||||
return formatBreakdownLabel(
|
||||
breakdownValue,
|
||||
breakdown,
|
||||
getVersionDisplayName,
|
||||
userNamesById,
|
||||
formatMessage,
|
||||
)
|
||||
}),
|
||||
formatMessage,
|
||||
).join(COMBINED_BREAKDOWN_LABEL_SEPARATOR)
|
||||
@@ -352,13 +441,27 @@ export function buildChartDatasets(
|
||||
normalizedBreakdowns.length > 0 &&
|
||||
!(normalizedBreakdowns.length === 1 && normalizedBreakdowns[0] === 'project')
|
||||
) {
|
||||
const hasVersionBreakdown = normalizedBreakdowns.includes('version_id')
|
||||
const hasDependentProjectBreakdown = normalizedBreakdowns.includes('dependent_project_download')
|
||||
const shouldShowDependentProjectTooltip =
|
||||
hasDependentProjectBreakdown && (selectedProjects.length > 1 || hasVersionBreakdown)
|
||||
const dataByBreakdown = new Map<string, number[]>()
|
||||
const breakdownValuesByKey = new Map<string, string[]>()
|
||||
const downloadTotalsByBreakdown = new Map<string, number>()
|
||||
const dependentOnProjectIdsByBreakdown = new Map<string, Set<string>>()
|
||||
|
||||
timeSlices.forEach((slice, sliceIndex) => {
|
||||
for (const point of slice) {
|
||||
if (!isProjectAnalyticsPointInSelectedProjects(point, selectedProjectIds)) continue
|
||||
if (
|
||||
!doesAnalyticsPointMatchNormalizedFilters(
|
||||
point,
|
||||
normalizedFilters,
|
||||
dependentProjectTypesById,
|
||||
)
|
||||
) {
|
||||
continue
|
||||
}
|
||||
|
||||
const breakdownValues = getAnalyticsBreakdownValues(
|
||||
point,
|
||||
@@ -374,6 +477,11 @@ export function buildChartDatasets(
|
||||
dataByBreakdown.set(breakdownKey, new Array(dataLength).fill(0))
|
||||
breakdownValuesByKey.set(breakdownKey, breakdownValues)
|
||||
}
|
||||
if (shouldShowDependentProjectTooltip && point.metric_kind === 'downloads') {
|
||||
const projectIds = dependentOnProjectIdsByBreakdown.get(breakdownKey) ?? new Set<string>()
|
||||
projectIds.add(point.source_project)
|
||||
dependentOnProjectIdsByBreakdown.set(breakdownKey, projectIds)
|
||||
}
|
||||
|
||||
if (point.metric_kind === 'downloads') {
|
||||
downloadTotalsByBreakdown.set(
|
||||
@@ -402,6 +510,42 @@ export function buildChartDatasets(
|
||||
return Array.from(dataByBreakdown.entries()).map(([breakdownKey, data]) => {
|
||||
const breakdownValues = breakdownValuesByKey.get(breakdownKey) ?? []
|
||||
const fallbackColor = colorsByBreakdown.get(breakdownKey) ?? ''
|
||||
const versionBreakdownIndex = normalizedBreakdowns.indexOf('version_id')
|
||||
const dependentProjectBreakdownIndex = normalizedBreakdowns.indexOf(
|
||||
'dependent_project_download',
|
||||
)
|
||||
const versionName =
|
||||
hasVersionBreakdown && versionBreakdownIndex !== -1
|
||||
? getVersionDisplayName?.(breakdownValues[versionBreakdownIndex] ?? '')
|
||||
: undefined
|
||||
const dependentProjectId =
|
||||
dependentProjectBreakdownIndex !== -1
|
||||
? breakdownValues[dependentProjectBreakdownIndex]
|
||||
: undefined
|
||||
const dependentProjectName = dependentProjectId
|
||||
? isMissingDependentProjectValue(dependentProjectId)
|
||||
? undefined
|
||||
: (projectNamesById.get(dependentProjectId) ?? dependentProjectId)
|
||||
: undefined
|
||||
const versionProjectName =
|
||||
normalizedBreakdowns.length === 1 && normalizedBreakdowns[0] === 'version_id'
|
||||
? getVersionProjectName?.(breakdownValues[0] ?? '')
|
||||
: undefined
|
||||
const dependencyProjectNames = [...(dependentOnProjectIdsByBreakdown.get(breakdownKey) ?? [])]
|
||||
.map((projectId) => projectNamesById.get(projectId) ?? projectId)
|
||||
.sort((left, right) => left.localeCompare(right))
|
||||
const dependentProjectTooltip = dependentProjectId
|
||||
? isNoDependentAnalyticsBreakdownValue(dependentProjectId)
|
||||
? formatMessage(analyticsMessages.noDependentTooltip)
|
||||
: isUnknownAnalyticsBreakdownValue(dependentProjectId)
|
||||
? formatMessage(analyticsMessages.unknown)
|
||||
: formatDependentProjectDatasetTooltip(
|
||||
versionName,
|
||||
dependentProjectName,
|
||||
dependencyProjectNames,
|
||||
formatMessage,
|
||||
)
|
||||
: undefined
|
||||
const color =
|
||||
normalizedBreakdowns.length === 1
|
||||
? getBreakdownColor(
|
||||
@@ -414,10 +558,8 @@ export function buildChartDatasets(
|
||||
return {
|
||||
projectId: getAnalyticsBreakdownDatasetId(breakdownValues, normalizedBreakdowns),
|
||||
label: formatChartBreakdownLabels(breakdownValues),
|
||||
projectName:
|
||||
normalizedBreakdowns.length === 1 && normalizedBreakdowns[0] === 'version_id'
|
||||
? getVersionProjectName?.(breakdownValues[0] ?? '')
|
||||
: undefined,
|
||||
projectName: versionProjectName,
|
||||
tooltip: dependentProjectTooltip ?? formatDatasetTooltip(versionProjectName),
|
||||
data,
|
||||
borderColor: color,
|
||||
backgroundColor: color,
|
||||
@@ -432,6 +574,15 @@ export function buildChartDatasets(
|
||||
timeSlices.forEach((slice, sliceIndex) => {
|
||||
for (const point of slice) {
|
||||
if (!isProjectAnalyticsPointInSelectedProjects(point, selectedProjectIds)) continue
|
||||
if (
|
||||
!doesAnalyticsPointMatchNormalizedFilters(
|
||||
point,
|
||||
normalizedFilters,
|
||||
dependentProjectTypesById,
|
||||
)
|
||||
) {
|
||||
continue
|
||||
}
|
||||
|
||||
if (point.metric_kind === 'downloads') {
|
||||
downloadTotal += getMetricValue(point, 'downloads')
|
||||
@@ -481,6 +632,15 @@ export function buildChartDatasets(
|
||||
timeSlices.forEach((slice, sliceIndex) => {
|
||||
for (const point of slice) {
|
||||
if (!isProjectAnalyticsPointInSelectedProjects(point, selectedProjectIds)) continue
|
||||
if (
|
||||
!doesAnalyticsPointMatchNormalizedFilters(
|
||||
point,
|
||||
normalizedFilters,
|
||||
dependentProjectTypesById,
|
||||
)
|
||||
) {
|
||||
continue
|
||||
}
|
||||
|
||||
const breakdownValues = getAnalyticsBreakdownValues(
|
||||
point,
|
||||
@@ -526,6 +686,10 @@ export function buildChartDatasets(
|
||||
return Array.from(dataByProjectBreakdown.entries()).map(([breakdownKey, data]) => {
|
||||
const breakdownValues = breakdownValuesByKey.get(breakdownKey) ?? []
|
||||
const fallbackColor = colorsByBreakdown.get(breakdownKey) ?? ''
|
||||
const versionProjectName =
|
||||
normalizedBreakdowns.length === 1 && normalizedBreakdowns[0] === 'version_id'
|
||||
? getVersionProjectName?.(breakdownValues[0] ?? '')
|
||||
: undefined
|
||||
const color =
|
||||
normalizedBreakdowns.length === 1
|
||||
? getBreakdownColor(
|
||||
@@ -538,10 +702,8 @@ export function buildChartDatasets(
|
||||
return {
|
||||
projectId: getAnalyticsBreakdownDatasetId(breakdownValues, normalizedBreakdowns),
|
||||
label: formatChartBreakdownLabels(breakdownValues),
|
||||
projectName:
|
||||
normalizedBreakdowns.length === 1 && normalizedBreakdowns[0] === 'version_id'
|
||||
? getVersionProjectName?.(breakdownValues[0] ?? '')
|
||||
: undefined,
|
||||
projectName: versionProjectName,
|
||||
tooltip: formatDatasetTooltip(versionProjectName),
|
||||
data,
|
||||
borderColor: color,
|
||||
backgroundColor: color,
|
||||
@@ -549,6 +711,10 @@ export function buildChartDatasets(
|
||||
})
|
||||
}
|
||||
|
||||
function isMissingDependentProjectValue(value: string | undefined): boolean {
|
||||
return isUnknownAnalyticsBreakdownValue(value) || isNoDependentAnalyticsBreakdownValue(value)
|
||||
}
|
||||
|
||||
export function getSliceCount(
|
||||
timeRange: Labrinth.Analytics.v3.TimeRange,
|
||||
fallback: number,
|
||||
|
||||
+27
-4
@@ -1,12 +1,15 @@
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import { useVIntl } from '@modrinth/ui'
|
||||
import { computed, type ComputedRef, ref, watch } from 'vue'
|
||||
|
||||
import { useTheme } from '~/composables/nuxt-accessors'
|
||||
import { isDarkTheme } from '~/plugins/theme/index.ts'
|
||||
import type {
|
||||
AnalyticsBreakdownPreset,
|
||||
AnalyticsDashboardContextValue,
|
||||
AnalyticsDashboardProject,
|
||||
AnalyticsDashboardStat,
|
||||
AnalyticsSelectedFilters,
|
||||
} from '~/providers/analytics/analytics'
|
||||
|
||||
import {
|
||||
@@ -47,12 +50,16 @@ export function useAnalyticsChartDatasets(
|
||||
| 'displayedPreviousTimeSlices'
|
||||
| 'displayedSelectedGroupBy'
|
||||
| 'displayedSelectedBreakdowns'
|
||||
| 'displayedSelectedFilters'
|
||||
| 'hiddenGraphDatasetIds'
|
||||
| 'hasExplicitGraphDatasetSelection'
|
||||
| 'isGraphDatasetSelectionActive'
|
||||
| 'selectedGraphDatasetIds'
|
||||
| 'defaultGraphDatasetIds'
|
||||
| 'topGraphDatasetIds'
|
||||
| 'projectNamesById'
|
||||
| 'userNamesById'
|
||||
| 'dependentProjectTypesById'
|
||||
| 'getVersionDisplayName'
|
||||
| 'getVersionProjectName'
|
||||
>,
|
||||
@@ -160,6 +167,10 @@ export function useAnalyticsChartDatasets(
|
||||
selectedProjects.value,
|
||||
legendPalette.value,
|
||||
context.displayedSelectedBreakdowns.value,
|
||||
context.displayedSelectedFilters.value,
|
||||
context.dependentProjectTypesById.value,
|
||||
context.projectNamesById.value,
|
||||
context.userNamesById.value,
|
||||
context.getVersionDisplayName,
|
||||
showProjectVersionNames.value ? context.getVersionProjectName : undefined,
|
||||
formatMessage,
|
||||
@@ -172,6 +183,10 @@ export function useAnalyticsChartDatasets(
|
||||
selectedProjects.value,
|
||||
legendPalette.value,
|
||||
context.displayedSelectedBreakdowns.value,
|
||||
context.displayedSelectedFilters.value,
|
||||
context.dependentProjectTypesById.value,
|
||||
context.projectNamesById.value,
|
||||
context.userNamesById.value,
|
||||
context.getVersionDisplayName,
|
||||
showProjectVersionNames.value ? context.getVersionProjectName : undefined,
|
||||
formatMessage,
|
||||
@@ -357,12 +372,16 @@ export function useAnalyticsChartDatasets(
|
||||
}
|
||||
|
||||
function buildDatasetsByStat(
|
||||
timeSlices: Parameters<typeof buildChartDatasets>[0],
|
||||
timeSlices: Labrinth.Analytics.v3.TimeSlice[],
|
||||
selectedProjects: AnalyticsDashboardProject[],
|
||||
palette: string[],
|
||||
selectedBreakdowns: Parameters<typeof buildChartDatasets>[4],
|
||||
getVersionDisplayName: Parameters<typeof buildChartDatasets>[5],
|
||||
getVersionProjectName: Parameters<typeof buildChartDatasets>[6],
|
||||
selectedBreakdowns: readonly AnalyticsBreakdownPreset[],
|
||||
selectedFilters: AnalyticsSelectedFilters,
|
||||
dependentProjectTypesById: ReadonlyMap<string, readonly string[]>,
|
||||
projectNamesById: ReadonlyMap<string, string>,
|
||||
userNamesById: ReadonlyMap<string, string>,
|
||||
getVersionDisplayName: (versionId: string) => string,
|
||||
getVersionProjectName: ((versionId: string) => string | undefined) | undefined,
|
||||
formatMessage: FormatMessage,
|
||||
sliceCount: number,
|
||||
) {
|
||||
@@ -374,6 +393,10 @@ function buildDatasetsByStat(
|
||||
stat,
|
||||
palette,
|
||||
selectedBreakdowns,
|
||||
selectedFilters,
|
||||
dependentProjectTypesById,
|
||||
projectNamesById,
|
||||
userNamesById,
|
||||
getVersionDisplayName,
|
||||
getVersionProjectName,
|
||||
formatMessage,
|
||||
|
||||
@@ -13,6 +13,7 @@ export type AnalyticsBreakdownItemType =
|
||||
| 'downloadSource'
|
||||
| 'gameVersion'
|
||||
| 'loader'
|
||||
| 'member'
|
||||
| 'monetization'
|
||||
| 'project'
|
||||
| 'projectVersion'
|
||||
@@ -83,6 +84,14 @@ export const analyticsMessages = defineMessages({
|
||||
id: 'analytics.value.unknown',
|
||||
defaultMessage: 'Unknown',
|
||||
},
|
||||
noDependent: {
|
||||
id: 'analytics.value.no-dependent',
|
||||
defaultMessage: 'None',
|
||||
},
|
||||
noDependentTooltip: {
|
||||
id: 'analytics.value.no-dependent-tooltip',
|
||||
defaultMessage: 'Downloaded for reasons other than being a dependency',
|
||||
},
|
||||
other: {
|
||||
id: 'analytics.value.other',
|
||||
defaultMessage: 'Other',
|
||||
@@ -175,6 +184,14 @@ export const analyticsMessages = defineMessages({
|
||||
id: 'analytics.filter.search.project-versions',
|
||||
defaultMessage: 'Search project versions...',
|
||||
},
|
||||
searchDependentProjectsPlaceholder: {
|
||||
id: 'analytics.filter.search.dependent-projects',
|
||||
defaultMessage: 'Search projects...',
|
||||
},
|
||||
searchMembersPlaceholder: {
|
||||
id: 'analytics.filter.search.members',
|
||||
defaultMessage: 'Search members...',
|
||||
},
|
||||
searchVersionsPlaceholder: {
|
||||
id: 'analytics.filter.search.versions',
|
||||
defaultMessage: 'Search versions...',
|
||||
@@ -351,6 +368,22 @@ export const analyticsBreakdownMessages = defineMessages({
|
||||
id: 'analytics.breakdown.download-reason',
|
||||
defaultMessage: 'Download reason',
|
||||
},
|
||||
members: {
|
||||
id: 'analytics.breakdown.members',
|
||||
defaultMessage: 'Member',
|
||||
},
|
||||
dependentProjectDownload: {
|
||||
id: 'analytics.breakdown.dependent-project-download',
|
||||
defaultMessage: 'Dependent project',
|
||||
},
|
||||
dependentProjectType: {
|
||||
id: 'analytics.breakdown.dependent-project-type',
|
||||
defaultMessage: 'Dependent project type',
|
||||
},
|
||||
dependentOn: {
|
||||
id: 'analytics.breakdown.dependent-on',
|
||||
defaultMessage: 'Dependent on',
|
||||
},
|
||||
versionId: {
|
||||
id: 'analytics.breakdown.project-version',
|
||||
defaultMessage: 'Project version',
|
||||
@@ -517,25 +550,33 @@ export const analyticsChartMessages = defineMessages({
|
||||
id: 'analytics.chart.action.show-top-eight',
|
||||
defaultMessage: 'Show top 8',
|
||||
},
|
||||
dependentOnProjectTooltip: {
|
||||
id: 'analytics.chart.tooltip.dependent-on-project',
|
||||
defaultMessage: 'Dependent on {project}',
|
||||
},
|
||||
dependentProjectVersionTooltip: {
|
||||
id: 'analytics.chart.tooltip.dependent-project-version',
|
||||
defaultMessage: '{dependentProject} dependent on {dependencyProject}, {version}',
|
||||
},
|
||||
tableSelectionLimited: {
|
||||
id: 'analytics.chart.table-selection.limited',
|
||||
defaultMessage:
|
||||
'Showing {limit} {itemType, select, project {{limit, plural, one {project} other {projects}}} country {{limit, plural, one {country} other {countries}}} monetization {{limit, plural, one {monetization value} other {monetization values}}} downloadSource {{limit, plural, one {download source} other {download sources}}} downloadReason {{limit, plural, one {download reason} other {download reasons}}} projectVersion {{limit, plural, one {project version} other {project versions}}} loader {{limit, plural, one {loader} other {loaders}}} gameVersion {{limit, plural, one {game version} other {game versions}}} other {{limit, plural, one {item} other {items}}}} from table',
|
||||
'Showing {limit} {itemType, select, project {{limit, plural, one {project} other {projects}}} country {{limit, plural, one {country} other {countries}}} monetization {{limit, plural, one {monetization value} other {monetization values}}} downloadSource {{limit, plural, one {download source} other {download sources}}} downloadReason {{limit, plural, one {download reason} other {download reasons}}} member {{limit, plural, one {member} other {members}}} projectVersion {{limit, plural, one {project version} other {project versions}}} loader {{limit, plural, one {loader} other {loaders}}} gameVersion {{limit, plural, one {game version} other {game versions}}} other {{limit, plural, one {item} other {items}}}} from table',
|
||||
},
|
||||
tableSelectionAll: {
|
||||
id: 'analytics.chart.table-selection.all',
|
||||
defaultMessage:
|
||||
'Showing all {itemType, select, project {{count, plural, one {project} other {projects}}} country {{count, plural, one {country} other {countries}}} monetization {{count, plural, one {monetization value} other {monetization values}}} downloadSource {{count, plural, one {download source} other {download sources}}} downloadReason {{count, plural, one {download reason} other {download reasons}}} projectVersion {{count, plural, one {project version} other {project versions}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {game version} other {game versions}}} other {{count, plural, one {item} other {items}}}} from table',
|
||||
'Showing all {itemType, select, project {{count, plural, one {project} other {projects}}} country {{count, plural, one {country} other {countries}}} monetization {{count, plural, one {monetization value} other {monetization values}}} downloadSource {{count, plural, one {download source} other {download sources}}} downloadReason {{count, plural, one {download reason} other {download reasons}}} member {{count, plural, one {member} other {members}}} projectVersion {{count, plural, one {project version} other {project versions}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {game version} other {game versions}}} other {{count, plural, one {item} other {items}}}} from table',
|
||||
},
|
||||
tableSelectionTop: {
|
||||
id: 'analytics.chart.table-selection.top',
|
||||
defaultMessage:
|
||||
'Showing top {count} {itemType, select, project {{count, plural, one {project} other {projects}}} country {{count, plural, one {country} other {countries}}} monetization {{count, plural, one {monetization value} other {monetization values}}} downloadSource {{count, plural, one {download source} other {download sources}}} downloadReason {{count, plural, one {download reason} other {download reasons}}} projectVersion {{count, plural, one {project version} other {project versions}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {game version} other {game versions}}} other {{count, plural, one {item} other {items}}}} from table',
|
||||
'Showing top {count} {itemType, select, project {{count, plural, one {project} other {projects}}} country {{count, plural, one {country} other {countries}}} monetization {{count, plural, one {monetization value} other {monetization values}}} downloadSource {{count, plural, one {download source} other {download sources}}} downloadReason {{count, plural, one {download reason} other {download reasons}}} member {{count, plural, one {member} other {members}}} projectVersion {{count, plural, one {project version} other {project versions}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {game version} other {game versions}}} other {{count, plural, one {item} other {items}}}} from table',
|
||||
},
|
||||
tableSelectionCount: {
|
||||
id: 'analytics.chart.table-selection.count',
|
||||
defaultMessage:
|
||||
'Showing {count} {itemType, select, project {{count, plural, one {project} other {projects}}} country {{count, plural, one {country} other {countries}}} monetization {{count, plural, one {monetization value} other {monetization values}}} downloadSource {{count, plural, one {download source} other {download sources}}} downloadReason {{count, plural, one {download reason} other {download reasons}}} projectVersion {{count, plural, one {project version} other {project versions}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {game version} other {game versions}}} other {{count, plural, one {item} other {items}}}} from table',
|
||||
'Showing {count} {itemType, select, project {{count, plural, one {project} other {projects}}} country {{count, plural, one {country} other {countries}}} monetization {{count, plural, one {monetization value} other {monetization values}}} downloadSource {{count, plural, one {download source} other {download sources}}} downloadReason {{count, plural, one {download reason} other {download reasons}}} member {{count, plural, one {member} other {members}}} projectVersion {{count, plural, one {project version} other {project versions}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {game version} other {game versions}}} other {{count, plural, one {item} other {items}}}} from table',
|
||||
},
|
||||
lineView: {
|
||||
id: 'analytics.chart.view.line',
|
||||
@@ -781,6 +822,10 @@ export function formatAnalyticsBreakdownLabel(
|
||||
return formatMessage(analyticsBreakdownMessages.userAgent)
|
||||
case 'download_reason':
|
||||
return formatMessage(analyticsBreakdownMessages.downloadReason)
|
||||
case 'user_id':
|
||||
return formatMessage(analyticsBreakdownMessages.members)
|
||||
case 'dependent_project_download':
|
||||
return formatMessage(analyticsBreakdownMessages.dependentProjectDownload)
|
||||
case 'version_id':
|
||||
return formatMessage(analyticsBreakdownMessages.versionId)
|
||||
case 'loader':
|
||||
@@ -810,6 +855,10 @@ export function getAnalyticsBreakdownItemType(
|
||||
return 'downloadSource'
|
||||
case 'download_reason':
|
||||
return 'downloadReason'
|
||||
case 'user_id':
|
||||
return 'member'
|
||||
case 'dependent_project_download':
|
||||
return 'project'
|
||||
case 'version_id':
|
||||
return 'projectVersion'
|
||||
case 'loader':
|
||||
@@ -853,6 +902,18 @@ export function formatAnalyticsDownloadReasonLabel(
|
||||
}
|
||||
}
|
||||
|
||||
export function formatAnalyticsDependentProjectFallbackLabel(
|
||||
downloadReason: string | undefined,
|
||||
formatMessage: FormatMessage,
|
||||
): string {
|
||||
const normalizedReason = downloadReason?.trim().toLowerCase()
|
||||
if (normalizedReason === 'standalone' || normalizedReason === 'update') {
|
||||
return formatMessage(analyticsMessages.noDependent)
|
||||
}
|
||||
|
||||
return formatMessage(analyticsMessages.unknown)
|
||||
}
|
||||
|
||||
export function formatAnalyticsDownloadSourceLabel(
|
||||
source: string,
|
||||
formatMessage: FormatMessage,
|
||||
|
||||
@@ -19,6 +19,8 @@ import type {
|
||||
MutableRouteQuery,
|
||||
} from '~/providers/analytics/analytics-types'
|
||||
|
||||
import { getAnalyticsBreakdownsWithSharedStats } from './query-builder/query-filter-utils'
|
||||
|
||||
export const DEFAULT_TIMEFRAME_PRESET: AnalyticsTimeframePreset = 'last_30_days'
|
||||
export const DEFAULT_TIMEFRAME_MODE: AnalyticsTimeframeMode = 'preset'
|
||||
export const DEFAULT_LAST_TIMEFRAME_AMOUNT = 1
|
||||
@@ -73,9 +75,11 @@ const BREAKDOWN_PRESET_VALUES: AnalyticsBreakdownPreset[] = [
|
||||
'monetization',
|
||||
'user_agent',
|
||||
'download_reason',
|
||||
'user_id',
|
||||
'version_id',
|
||||
'loader',
|
||||
'game_version',
|
||||
'dependent_project_download',
|
||||
]
|
||||
|
||||
const ANALYTICS_DASHBOARD_STAT_VALUES: AnalyticsDashboardStat[] = [
|
||||
@@ -89,15 +93,18 @@ const ANALYTICS_GRAPH_VIEW_MODE_VALUES: AnalyticsGraphViewMode[] = ['line', 'are
|
||||
const ANALYTICS_TABLE_SORT_COLUMN_VALUES: AnalyticsTableSortColumn[] = [
|
||||
'date',
|
||||
'project',
|
||||
'dependent_on',
|
||||
'breakdown',
|
||||
'breakdown_project',
|
||||
'breakdown_country',
|
||||
'breakdown_monetization',
|
||||
'breakdown_user_agent',
|
||||
'breakdown_download_reason',
|
||||
'breakdown_user_id',
|
||||
'breakdown_version_id',
|
||||
'breakdown_loader',
|
||||
'breakdown_game_version',
|
||||
'breakdown_dependent_project_download',
|
||||
'views',
|
||||
'downloads',
|
||||
'revenue',
|
||||
@@ -131,9 +138,12 @@ const QUERY_KEY_FILTER_MONETIZATION = 'a_monetization'
|
||||
const QUERY_KEY_FILTER_USER_AGENT = 'a_user_agent'
|
||||
const QUERY_KEY_FILTER_LEGACY_DOWNLOAD_SOURCE = 'a_download_source'
|
||||
const QUERY_KEY_FILTER_DOWNLOAD_REASON = 'a_download_reason'
|
||||
const QUERY_KEY_FILTER_USER_ID = 'a_user_id'
|
||||
const QUERY_KEY_FILTER_VERSION_ID = 'a_version_id'
|
||||
const QUERY_KEY_FILTER_GAME_VERSION = 'a_game_version'
|
||||
const QUERY_KEY_FILTER_LOADER_TYPE = 'a_loader_type'
|
||||
const QUERY_KEY_FILTER_DEPENDENT_PROJECT_ID = 'a_dependent_project_id'
|
||||
const QUERY_KEY_FILTER_DEPENDENT_PROJECT_TYPE = 'a_dependent_project_type'
|
||||
const QUERY_KEY_STAT = 'a_stat'
|
||||
const QUERY_KEY_GRAPH_VIEW_MODE = 'a_chart'
|
||||
const QUERY_KEY_GRAPH_RATIO_MODE = 'a_ratio'
|
||||
@@ -154,9 +164,12 @@ const URL_FILTER_CATEGORIES: Exclude<AnalyticsQueryFilterCategory, 'project'>[]
|
||||
'monetization',
|
||||
'user_agent',
|
||||
'download_reason',
|
||||
'user_id',
|
||||
'version_id',
|
||||
'game_version',
|
||||
'loader_type',
|
||||
'dependent_project_id',
|
||||
'dependent_project_type',
|
||||
]
|
||||
|
||||
const FILTER_QUERY_KEY_BY_CATEGORY: Record<
|
||||
@@ -168,9 +181,12 @@ const FILTER_QUERY_KEY_BY_CATEGORY: Record<
|
||||
monetization: QUERY_KEY_FILTER_MONETIZATION,
|
||||
user_agent: QUERY_KEY_FILTER_USER_AGENT,
|
||||
download_reason: QUERY_KEY_FILTER_DOWNLOAD_REASON,
|
||||
user_id: QUERY_KEY_FILTER_USER_ID,
|
||||
version_id: QUERY_KEY_FILTER_VERSION_ID,
|
||||
game_version: QUERY_KEY_FILTER_GAME_VERSION,
|
||||
loader_type: QUERY_KEY_FILTER_LOADER_TYPE,
|
||||
dependent_project_id: QUERY_KEY_FILTER_DEPENDENT_PROJECT_ID,
|
||||
dependent_project_type: QUERY_KEY_FILTER_DEPENDENT_PROJECT_TYPE,
|
||||
}
|
||||
|
||||
const ANALYTICS_QUERY_KEYS = [
|
||||
@@ -189,9 +205,12 @@ const ANALYTICS_QUERY_KEYS = [
|
||||
QUERY_KEY_FILTER_USER_AGENT,
|
||||
QUERY_KEY_FILTER_LEGACY_DOWNLOAD_SOURCE,
|
||||
QUERY_KEY_FILTER_DOWNLOAD_REASON,
|
||||
QUERY_KEY_FILTER_USER_ID,
|
||||
QUERY_KEY_FILTER_VERSION_ID,
|
||||
QUERY_KEY_FILTER_GAME_VERSION,
|
||||
QUERY_KEY_FILTER_LOADER_TYPE,
|
||||
QUERY_KEY_FILTER_DEPENDENT_PROJECT_ID,
|
||||
QUERY_KEY_FILTER_DEPENDENT_PROJECT_TYPE,
|
||||
QUERY_KEY_STAT,
|
||||
QUERY_KEY_GRAPH_VIEW_MODE,
|
||||
QUERY_KEY_GRAPH_RATIO_MODE,
|
||||
@@ -212,9 +231,12 @@ export function buildEmptySelectedFilters(): AnalyticsSelectedFilters {
|
||||
monetization: [],
|
||||
user_agent: [],
|
||||
download_reason: [],
|
||||
user_id: [],
|
||||
version_id: [],
|
||||
game_version: [],
|
||||
loader_type: [],
|
||||
dependent_project_id: [],
|
||||
dependent_project_type: [],
|
||||
}
|
||||
}
|
||||
|
||||
@@ -255,7 +277,7 @@ function normalizeFilterQueryValues(
|
||||
.filter((value) => PROJECT_STATUS_FILTER_VALUES.includes(value))
|
||||
}
|
||||
|
||||
if (category !== 'loader_type') {
|
||||
if (category !== 'loader_type' && category !== 'dependent_project_type') {
|
||||
return values
|
||||
}
|
||||
|
||||
@@ -456,7 +478,7 @@ export function getAnalyticsBreakdownPresetsForProjectSelection(
|
||||
}
|
||||
}
|
||||
|
||||
return normalizedBreakdowns
|
||||
return getAnalyticsBreakdownsWithSharedStats(normalizedBreakdowns)
|
||||
}
|
||||
|
||||
export function getAnalyticsBreakdownPresetForProjectSelection(
|
||||
@@ -776,6 +798,12 @@ export function hasAnalyticsProjectSelectionQuery(query: LocationQuery): boolean
|
||||
return parseListQueryValue(query[QUERY_KEY_PROJECT_IDS]).length > 0
|
||||
}
|
||||
|
||||
export function hasAnalyticsAllProjectSelectionQuery(query: LocationQuery): boolean {
|
||||
return parseListQueryValue(query[QUERY_KEY_PROJECT_IDS]).includes(
|
||||
PROJECT_SELECTION_ALL_QUERY_VALUE,
|
||||
)
|
||||
}
|
||||
|
||||
export function hasAnalyticsGraphProjectEventsVisibilityQuery(query: LocationQuery): boolean {
|
||||
return query[QUERY_KEY_GRAPH_PROJECT_EVENTS_VISIBILITY] !== undefined
|
||||
}
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
<template>
|
||||
<div class="mr-2.5 flex min-w-0 items-center gap-2">
|
||||
<span
|
||||
v-if="!hideIcon"
|
||||
v-tooltip="iconTooltip"
|
||||
class="flex size-6 shrink-0 items-center justify-center overflow-hidden rounded text-primary"
|
||||
>
|
||||
<img
|
||||
v-if="iconUrl"
|
||||
:src="iconUrl"
|
||||
:alt="formatMessage(analyticsMessages.projectIconAlt, { name: label })"
|
||||
class="h-6 w-6 rounded object-cover"
|
||||
/>
|
||||
<BoxIcon v-else class="h-full w-full" />
|
||||
</span>
|
||||
<component
|
||||
:is="labelHref ? 'a' : 'span'"
|
||||
v-tooltip="labelTooltip"
|
||||
:href="labelHref"
|
||||
:target="labelHref ? '_blank' : undefined"
|
||||
:rel="labelHref ? 'noopener noreferrer' : undefined"
|
||||
class="line-clamp-2 min-w-0 truncate text-wrap font-semibold leading-tight text-primary"
|
||||
:class="{ 'hover:underline': labelHref }"
|
||||
:title="label"
|
||||
>
|
||||
{{ label }}
|
||||
</component>
|
||||
<component
|
||||
:is="organizationHref ? 'a' : 'span'"
|
||||
v-if="organizationTooltip"
|
||||
v-tooltip="organizationTooltip"
|
||||
:href="organizationHref"
|
||||
:target="organizationHref ? '_blank' : undefined"
|
||||
:rel="organizationHref ? 'noopener noreferrer' : undefined"
|
||||
:aria-label="organizationTooltip"
|
||||
class="flex size-4 shrink-0 items-center text-primary"
|
||||
:class="{ 'hover:underline': organizationHref }"
|
||||
>
|
||||
<OrganizationIcon class="size-4" />
|
||||
</component>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { BoxIcon, OrganizationIcon } from '@modrinth/assets'
|
||||
import { useVIntl } from '@modrinth/ui'
|
||||
|
||||
import { analyticsMessages } from '../analytics-messages.ts'
|
||||
|
||||
defineProps<{
|
||||
label: string
|
||||
iconUrl?: string
|
||||
iconTooltip?: string
|
||||
hideIcon?: boolean
|
||||
labelHref?: string
|
||||
labelTooltip?: string
|
||||
organizationHref?: string
|
||||
organizationTooltip?: string
|
||||
}>()
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
</script>
|
||||
+5
-12
@@ -23,7 +23,6 @@ type BuildAnalyticsTableColumnsOptions = {
|
||||
selectedBreakdowns: readonly AnalyticsTableBreakdownPreset[]
|
||||
selectedFilters: AnalyticsSelectedFilters
|
||||
showBreakdownColumn: boolean
|
||||
showProjectVersionProjectColumn: boolean
|
||||
formatMessage: FormatMessage
|
||||
getRelevantAnalyticsDashboardStats: (
|
||||
breakdowns: readonly AnalyticsBreakdownPreset[],
|
||||
@@ -43,7 +42,6 @@ export function buildAnalyticsTableColumns({
|
||||
selectedBreakdowns,
|
||||
selectedFilters,
|
||||
showBreakdownColumn,
|
||||
showProjectVersionProjectColumn,
|
||||
formatMessage,
|
||||
getRelevantAnalyticsDashboardStats,
|
||||
}: BuildAnalyticsTableColumnsOptions): TableColumn<AnalyticsTableColumnKey>[] {
|
||||
@@ -66,20 +64,11 @@ export function buildAnalyticsTableColumns({
|
||||
key: getAnalyticsTableBreakdownColumnKey(breakdown),
|
||||
label: getAnalyticsTableBreakdownColumnLabel(breakdown, formatMessage),
|
||||
enableSorting: true,
|
||||
width: breakdown === 'project' ? '25%' : undefined,
|
||||
width: breakdown === 'project' && selectedBreakdowns.length === 1 ? '45%' : undefined,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
if (showProjectVersionProjectColumn) {
|
||||
nextColumns.push({
|
||||
key: 'project',
|
||||
label: formatAnalyticsBreakdownLabel('project', formatMessage),
|
||||
enableSorting: true,
|
||||
width: '25%',
|
||||
})
|
||||
}
|
||||
|
||||
for (const stat of stats) {
|
||||
const column = getAnalyticsTableMetricColumn(stat, formatMessage)
|
||||
if (column) {
|
||||
@@ -102,6 +91,7 @@ export function getAnalyticsTableMetricColumn(
|
||||
enableSorting: true,
|
||||
defaultSortDirection: 'desc',
|
||||
align: 'right',
|
||||
width: '20%',
|
||||
}
|
||||
case 'downloads':
|
||||
return {
|
||||
@@ -110,6 +100,7 @@ export function getAnalyticsTableMetricColumn(
|
||||
enableSorting: true,
|
||||
defaultSortDirection: 'desc',
|
||||
align: 'right',
|
||||
width: '20%',
|
||||
}
|
||||
case 'revenue':
|
||||
return {
|
||||
@@ -118,6 +109,7 @@ export function getAnalyticsTableMetricColumn(
|
||||
enableSorting: true,
|
||||
defaultSortDirection: 'desc',
|
||||
align: 'right',
|
||||
width: '20%',
|
||||
}
|
||||
case 'playtime':
|
||||
return {
|
||||
@@ -126,6 +118,7 @@ export function getAnalyticsTableMetricColumn(
|
||||
enableSorting: true,
|
||||
defaultSortDirection: 'desc',
|
||||
align: 'right',
|
||||
width: '20%',
|
||||
}
|
||||
default:
|
||||
return null
|
||||
|
||||
+2
@@ -67,6 +67,8 @@ function getAnalyticsTableCsvCellValue(
|
||||
return row.date
|
||||
case 'project':
|
||||
return row.project
|
||||
case 'dependent_on':
|
||||
return row.dependent_on
|
||||
case 'breakdown':
|
||||
return row.breakdownDisplay
|
||||
case 'views':
|
||||
|
||||
+94
-7
@@ -1,8 +1,11 @@
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
|
||||
import type {
|
||||
AnalyticsBreakdownPreset,
|
||||
AnalyticsDashboardStat,
|
||||
import {
|
||||
type AnalyticsBreakdownPreset,
|
||||
type AnalyticsDashboardStat,
|
||||
type AnalyticsSelectedFilters,
|
||||
doesAnalyticsPointMatchNormalizedFilters,
|
||||
normalizeAnalyticsSelectedFilters,
|
||||
} from '~/providers/analytics/analytics'
|
||||
|
||||
import {
|
||||
@@ -12,13 +15,18 @@ import {
|
||||
getSliceCount,
|
||||
} from '../analytics-chart/analytics-chart-utils'
|
||||
import type { FormatMessage } from '../analytics-messages'
|
||||
import { analyticsMessages } from '../analytics-messages'
|
||||
import {
|
||||
analyticsMessages,
|
||||
formatAnalyticsDependentProjectFallbackLabel,
|
||||
} from '../analytics-messages'
|
||||
import {
|
||||
ALL_BREAKDOWN_VALUE,
|
||||
COMBINED_BREAKDOWN_LABEL_SEPARATOR,
|
||||
getAnalyticsBreakdownDatasetId,
|
||||
getAnalyticsBreakdownKey,
|
||||
getAnalyticsBreakdownValues,
|
||||
isNoDependentAnalyticsBreakdownValue,
|
||||
isUnknownAnalyticsBreakdownValue,
|
||||
} from '../breakdown'
|
||||
import { getAnalyticsTableBreakdownColumnKey } from './analytics-table-columns'
|
||||
import type {
|
||||
@@ -36,8 +44,12 @@ type BuildAnalyticsTableRowsOptions = {
|
||||
timeSlices: Labrinth.Analytics.v3.TimeSlice[]
|
||||
selectedBreakdowns: readonly AnalyticsTableBreakdownPreset[]
|
||||
selectedProjectIds: ReadonlySet<string>
|
||||
selectedFilters: AnalyticsSelectedFilters
|
||||
dependentProjectTypesById: ReadonlyMap<string, readonly string[]>
|
||||
includeDependentProjectTooltipContext: boolean
|
||||
relevantStats: ReadonlySet<AnalyticsDashboardStat>
|
||||
projectNamesById: ReadonlyMap<string, string>
|
||||
userNamesById: ReadonlyMap<string, string>
|
||||
getVersionDisplayName: (versionId: string) => string
|
||||
getVersionProjectName: (versionId: string) => string | undefined
|
||||
showTimeInBucketLabel: boolean
|
||||
@@ -51,8 +63,12 @@ export function buildAnalyticsTableRows({
|
||||
timeSlices,
|
||||
selectedBreakdowns,
|
||||
selectedProjectIds,
|
||||
selectedFilters,
|
||||
dependentProjectTypesById,
|
||||
includeDependentProjectTooltipContext,
|
||||
relevantStats,
|
||||
projectNamesById,
|
||||
userNamesById,
|
||||
getVersionDisplayName,
|
||||
getVersionProjectName,
|
||||
showTimeInBucketLabel,
|
||||
@@ -72,6 +88,7 @@ export function buildAnalyticsTableRows({
|
||||
const projectDisplayValues = new Map<string, string>()
|
||||
const nextRows = new Map<string, AnalyticsTableRow>()
|
||||
const bucketLabelsBySliceIndex = new Map<number, { date: string; dateMs: number }>()
|
||||
const normalizedFilters = normalizeAnalyticsSelectedFilters(selectedFilters)
|
||||
|
||||
function getBreakdownDisplayValue(
|
||||
breakdownValue: string,
|
||||
@@ -84,6 +101,7 @@ export function buildAnalyticsTableRows({
|
||||
breakdownValue,
|
||||
breakdown,
|
||||
projectNamesById,
|
||||
userNamesById,
|
||||
getVersionDisplayName,
|
||||
formatMessage,
|
||||
)
|
||||
@@ -111,6 +129,15 @@ export function buildAnalyticsTableRows({
|
||||
return displayValue
|
||||
}
|
||||
|
||||
function getProjectVersionIdForBreakdownValues(breakdownValues: readonly string[]) {
|
||||
const versionBreakdownIndex = selectedBreakdowns.indexOf('version_id')
|
||||
if (versionBreakdownIndex === -1) {
|
||||
return ''
|
||||
}
|
||||
|
||||
return breakdownValues[versionBreakdownIndex] ?? ''
|
||||
}
|
||||
|
||||
function getBreakdownDisplays(breakdownValues: readonly string[]) {
|
||||
const displays: AnalyticsTableBreakdownDisplayValues = {}
|
||||
|
||||
@@ -118,6 +145,19 @@ export function buildAnalyticsTableRows({
|
||||
displays[breakdown] = getBreakdownDisplayValue(breakdownValues[index] ?? '', breakdown)
|
||||
})
|
||||
|
||||
const dependentProjectBreakdownIndex = selectedBreakdowns.indexOf('dependent_project_download')
|
||||
const downloadReasonBreakdownIndex = selectedBreakdowns.indexOf('download_reason')
|
||||
if (
|
||||
dependentProjectBreakdownIndex !== -1 &&
|
||||
downloadReasonBreakdownIndex !== -1 &&
|
||||
isUnknownAnalyticsBreakdownValue(breakdownValues[dependentProjectBreakdownIndex])
|
||||
) {
|
||||
displays.dependent_project_download = formatAnalyticsDependentProjectFallbackLabel(
|
||||
breakdownValues[downloadReasonBreakdownIndex],
|
||||
formatMessage,
|
||||
)
|
||||
}
|
||||
|
||||
return displays
|
||||
}
|
||||
|
||||
@@ -157,6 +197,7 @@ export function buildAnalyticsTableRows({
|
||||
function createRow(
|
||||
rowId: string,
|
||||
breakdownValues: readonly string[],
|
||||
dependentOnProjectId?: string,
|
||||
bucketLabel?: { date: string; dateMs: number },
|
||||
) {
|
||||
const breakdownKey =
|
||||
@@ -169,6 +210,12 @@ export function buildAnalyticsTableRows({
|
||||
date: bucketLabel?.date ?? '',
|
||||
dateMs: bucketLabel?.dateMs ?? 0,
|
||||
project: getProjectDisplayValueForBreakdownValues(breakdownValues),
|
||||
projectVersionId: getProjectVersionIdForBreakdownValues(breakdownValues),
|
||||
dependent_on: dependentOnProjectId
|
||||
? (projectNamesById.get(dependentOnProjectId) ?? dependentOnProjectId)
|
||||
: '',
|
||||
dependentOnProjectId: dependentOnProjectId ?? '',
|
||||
dependentOnProjectIds: dependentOnProjectId ? [dependentOnProjectId] : [],
|
||||
breakdown: breakdownKey,
|
||||
breakdownValues: Object.fromEntries(
|
||||
selectedBreakdowns.map((breakdown, index) => [breakdown, breakdownValues[index] ?? '']),
|
||||
@@ -190,6 +237,18 @@ export function buildAnalyticsTableRows({
|
||||
return row
|
||||
}
|
||||
|
||||
function addDependentOnProjectIdToRow(row: AnalyticsTableRow, projectId: string | undefined) {
|
||||
if (!projectId || row.dependentOnProjectIds.includes(projectId)) {
|
||||
return
|
||||
}
|
||||
|
||||
row.dependentOnProjectIds.push(projectId)
|
||||
if (!row.dependentOnProjectId) {
|
||||
row.dependentOnProjectId = projectId
|
||||
row.dependent_on = projectNamesById.get(projectId) ?? projectId
|
||||
}
|
||||
}
|
||||
|
||||
if (!includeDate && selectedBreakdowns.length === 0) {
|
||||
createRow(ALL_PROJECTS_BREAKDOWN_VALUE, [])
|
||||
}
|
||||
@@ -211,6 +270,15 @@ export function buildAnalyticsTableRows({
|
||||
if (!selectedProjectIds.has(point.source_project)) {
|
||||
continue
|
||||
}
|
||||
if (
|
||||
!doesAnalyticsPointMatchNormalizedFilters(
|
||||
point,
|
||||
normalizedFilters,
|
||||
dependentProjectTypesById,
|
||||
)
|
||||
) {
|
||||
continue
|
||||
}
|
||||
|
||||
const pointStat = getAnalyticsTableStatForMetric(point.metric_kind)
|
||||
if (!pointStat || !relevantStats.has(pointStat)) {
|
||||
@@ -226,12 +294,21 @@ export function buildAnalyticsTableRows({
|
||||
}
|
||||
|
||||
const nextBucketLabel = includeDate ? (bucketLabel ?? getBucketLabel(sliceIndex)) : undefined
|
||||
const dependentOnProjectId = includeDependentProjectTooltipContext
|
||||
? point.source_project
|
||||
: undefined
|
||||
const dependentTooltipProjectId = selectedBreakdowns.includes('dependent_project_download')
|
||||
? point.source_project
|
||||
: undefined
|
||||
const breakdownKey =
|
||||
breakdownValues.length === 0
|
||||
? ALL_PROJECTS_BREAKDOWN_VALUE
|
||||
: getAnalyticsBreakdownKey(breakdownValues)
|
||||
const rowId = includeDate ? `${nextBucketLabel?.dateMs ?? 0}::${breakdownKey}` : breakdownKey
|
||||
const row = nextRows.get(rowId) ?? createRow(rowId, breakdownValues, nextBucketLabel)
|
||||
const row =
|
||||
nextRows.get(rowId) ??
|
||||
createRow(rowId, breakdownValues, dependentOnProjectId, nextBucketLabel)
|
||||
addDependentOnProjectIdToRow(row, dependentTooltipProjectId)
|
||||
addAnalyticsMetricToTableRow(row, point)
|
||||
}
|
||||
})
|
||||
@@ -292,11 +369,21 @@ function formatAnalyticsTableBreakdownDisplayValue(
|
||||
value: string,
|
||||
breakdown: AnalyticsTableBreakdownPreset,
|
||||
projectNamesById: ReadonlyMap<string, string>,
|
||||
userNamesById: ReadonlyMap<string, string>,
|
||||
getVersionDisplayName: (versionId: string) => string,
|
||||
formatMessage: FormatMessage,
|
||||
): string {
|
||||
if (breakdown === 'project') {
|
||||
if (breakdown === 'project' || breakdown === 'dependent_project_download') {
|
||||
if (breakdown === 'dependent_project_download') {
|
||||
if (isNoDependentAnalyticsBreakdownValue(value)) {
|
||||
return formatMessage(analyticsMessages.noDependent)
|
||||
}
|
||||
if (isUnknownAnalyticsBreakdownValue(value)) {
|
||||
return formatMessage(analyticsMessages.unknown)
|
||||
}
|
||||
}
|
||||
|
||||
return projectNamesById.get(value) ?? value
|
||||
}
|
||||
return formatBreakdownLabel(value, breakdown, getVersionDisplayName, formatMessage)
|
||||
return formatBreakdownLabel(value, breakdown, getVersionDisplayName, userNamesById, formatMessage)
|
||||
}
|
||||
|
||||
+3
-1
@@ -3,7 +3,7 @@ import type { TableColumn } from '@modrinth/ui'
|
||||
import { isAnalyticsTableBreakdownColumnKey } from './analytics-table-columns'
|
||||
import type { AnalyticsTableColumnKey, AnalyticsTableRow } from './analytics-table-types'
|
||||
|
||||
const SEARCHABLE_COLUMN_KEYS = new Set<AnalyticsTableColumnKey>(['date', 'project'])
|
||||
const SEARCHABLE_COLUMN_KEYS = new Set<AnalyticsTableColumnKey>(['date', 'project', 'dependent_on'])
|
||||
|
||||
export function getAnalyticsTableSearchableColumns(
|
||||
columns: TableColumn<AnalyticsTableColumnKey>[],
|
||||
@@ -39,6 +39,8 @@ function getAnalyticsTableSearchableCellValue(
|
||||
return row.date
|
||||
case 'project':
|
||||
return row.project
|
||||
case 'dependent_on':
|
||||
return row.dependent_on
|
||||
case 'breakdown':
|
||||
return row.breakdownDisplay
|
||||
default:
|
||||
|
||||
+9
@@ -129,6 +129,15 @@ function getAnalyticsTableRowComparator(
|
||||
directionFactor,
|
||||
sortCollator,
|
||||
)
|
||||
case 'dependent_on':
|
||||
return (left, right) =>
|
||||
compareAnalyticsTableRows(
|
||||
left,
|
||||
right,
|
||||
sortCollator.compare(left.dependent_on, right.dependent_on),
|
||||
directionFactor,
|
||||
sortCollator,
|
||||
)
|
||||
case 'breakdown':
|
||||
return (left, right) =>
|
||||
compareAnalyticsTableRows(
|
||||
|
||||
+5
-1
@@ -18,11 +18,15 @@ export type AnalyticsTableSortState = {
|
||||
export type AnalyticsTableSortDirectionValue = AnalyticsTableSortDirection
|
||||
|
||||
export type AnalyticsTableRow = {
|
||||
[key: string]: string | number | AnalyticsTableBreakdownDisplayValues
|
||||
[key: string]: string | number | string[] | AnalyticsTableBreakdownDisplayValues
|
||||
id: string
|
||||
date: string
|
||||
dateMs: number
|
||||
project: string
|
||||
projectVersionId: string
|
||||
dependent_on: string
|
||||
dependentOnProjectId: string
|
||||
dependentOnProjectIds: string[]
|
||||
breakdown: string
|
||||
breakdownValues: AnalyticsTableBreakdownDisplayValues
|
||||
breakdownDisplays: AnalyticsTableBreakdownDisplayValues
|
||||
|
||||
@@ -55,32 +55,92 @@
|
||||
<template #cell-date="{ value }">
|
||||
<span class="text-primary">{{ value }}</span>
|
||||
</template>
|
||||
<template #cell-breakdown_project="{ value }">
|
||||
<span class="text-primary">{{ value }}</span>
|
||||
<template #cell-breakdown_project="{ row, value }">
|
||||
<ProjectCell
|
||||
:label="getProjectCellLabel(value)"
|
||||
:icon-url="getProjectIconUrl(row.breakdownValues.project)"
|
||||
:icon-tooltip="getProjectCellLabel(value)"
|
||||
:label-href="getProjectPageHref(row.breakdownValues.project)"
|
||||
:organization-href="getProjectOrganizationPageHref(row.breakdownValues.project)"
|
||||
:organization-tooltip="getProjectOrganizationName(row.breakdownValues.project)"
|
||||
/>
|
||||
</template>
|
||||
<template #cell-breakdown_country="{ value }">
|
||||
<span class="text-primary">{{ value }}</span>
|
||||
<span class="mr-2.5 text-primary">{{ value }}</span>
|
||||
</template>
|
||||
<template #cell-breakdown_monetization="{ value }">
|
||||
<span class="text-primary">{{ value }}</span>
|
||||
<span class="mr-2.5 text-primary">{{ value }}</span>
|
||||
</template>
|
||||
<template #cell-breakdown_user_agent="{ value }">
|
||||
<span class="text-primary">{{ value }}</span>
|
||||
<span class="mr-2.5 text-primary">{{ value }}</span>
|
||||
</template>
|
||||
<template #cell-breakdown_download_reason="{ value }">
|
||||
<span class="text-primary">{{ value }}</span>
|
||||
<span class="mr-2.5 text-primary">{{ value }}</span>
|
||||
</template>
|
||||
<template #cell-breakdown_version_id="{ value }">
|
||||
<span class="text-primary">{{ value }}</span>
|
||||
<template #cell-breakdown_user_id="{ row, value }">
|
||||
<component
|
||||
:is="getUserPageHref(row.breakdownValues.user_id) ? 'a' : 'span'"
|
||||
:href="getUserPageHref(row.breakdownValues.user_id)"
|
||||
:target="getUserPageHref(row.breakdownValues.user_id) ? '_blank' : undefined"
|
||||
:rel="getUserPageHref(row.breakdownValues.user_id) ? 'noopener noreferrer' : undefined"
|
||||
class="mr-2.5 flex min-w-0 items-center gap-2 text-primary"
|
||||
:class="{ 'hover:underline': getUserPageHref(row.breakdownValues.user_id) }"
|
||||
>
|
||||
<span
|
||||
v-tooltip="getUserCellLabel(value)"
|
||||
class="flex size-6 shrink-0 items-center justify-center overflow-hidden rounded-full text-primary"
|
||||
>
|
||||
<img
|
||||
v-if="getUserAvatarUrl(row.breakdownValues.user_id)"
|
||||
:src="getUserAvatarUrl(row.breakdownValues.user_id)"
|
||||
:alt="getUserCellLabel(value)"
|
||||
class="h-6 w-6 rounded-full object-cover"
|
||||
/>
|
||||
<UserIcon v-else class="h-full w-full" />
|
||||
</span>
|
||||
<span class="min-w-0 truncate font-semibold leading-tight text-primary">
|
||||
{{ value }}
|
||||
</span>
|
||||
</component>
|
||||
</template>
|
||||
<template #cell-breakdown_dependent_project_download="{ row, value }">
|
||||
<ProjectCell
|
||||
:label="getProjectCellLabel(value)"
|
||||
:icon-url="
|
||||
isMissingDependentProjectValue(row.breakdownValues.dependent_project_download)
|
||||
? undefined
|
||||
: getProjectIconUrl(row.breakdownValues.dependent_project_download)
|
||||
"
|
||||
:icon-tooltip="getProjectCellLabel(value)"
|
||||
:hide-icon="
|
||||
isMissingDependentProjectValue(row.breakdownValues.dependent_project_download)
|
||||
"
|
||||
:label-href="
|
||||
isMissingDependentProjectValue(row.breakdownValues.dependent_project_download)
|
||||
? undefined
|
||||
: getProjectPageHref(row.breakdownValues.dependent_project_download)
|
||||
"
|
||||
:label-tooltip="getDependentProjectTooltip(row)"
|
||||
/>
|
||||
</template>
|
||||
<template #cell-breakdown_version_id="{ row, value }">
|
||||
<component
|
||||
:is="getVersionPageHref(row.projectVersionId) ? 'a' : 'span'"
|
||||
v-tooltip="getVersionProjectName(row.projectVersionId)"
|
||||
:href="getVersionPageHref(row.projectVersionId)"
|
||||
:target="getVersionPageHref(row.projectVersionId) ? '_blank' : undefined"
|
||||
:rel="getVersionPageHref(row.projectVersionId) ? 'noopener noreferrer' : undefined"
|
||||
class="mr-2.5 text-primary"
|
||||
:class="{ 'hover:underline': getVersionPageHref(row.projectVersionId) }"
|
||||
>
|
||||
{{ value }}
|
||||
</component>
|
||||
</template>
|
||||
<template #cell-breakdown_loader="{ value }">
|
||||
<span class="text-primary">{{ value }}</span>
|
||||
<span class="mr-2.5 text-primary">{{ value }}</span>
|
||||
</template>
|
||||
<template #cell-breakdown_game_version="{ value }">
|
||||
<span class="text-primary">{{ value }}</span>
|
||||
</template>
|
||||
<template #cell-project="{ value }">
|
||||
<span class="text-primary">{{ value }}</span>
|
||||
<span class="mr-2.5 text-primary">{{ value }}</span>
|
||||
</template>
|
||||
<template #cell-views="{ row }">
|
||||
<span>{{ formatInteger(row.views) }}</span>
|
||||
@@ -130,7 +190,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { DownloadIcon, DropdownIcon, SearchIcon } from '@modrinth/assets'
|
||||
import { DownloadIcon, DropdownIcon, SearchIcon, UserIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
OverflowMenu,
|
||||
@@ -159,10 +219,15 @@ import {
|
||||
} from '../analytics-chart/analytics-chart-utils.ts'
|
||||
import {
|
||||
analyticsBreakdownMessages,
|
||||
analyticsChartMessages,
|
||||
analyticsMessages,
|
||||
analyticsTableMessages,
|
||||
} from '../analytics-messages.ts'
|
||||
import AnalyticsLoadingBar from '../AnalyticsLoadingBar.vue'
|
||||
import {
|
||||
isNoDependentAnalyticsBreakdownValue,
|
||||
isUnknownAnalyticsBreakdownValue,
|
||||
} from '../breakdown.ts'
|
||||
import {
|
||||
buildAnalyticsTableColumns,
|
||||
getAnalyticsTableBreakdownColumnLabel,
|
||||
@@ -194,8 +259,10 @@ import { sortAnalyticsTableRows } from './analytics-table-sorting.ts'
|
||||
import type {
|
||||
AnalyticsTableColumnKey,
|
||||
AnalyticsTableMode,
|
||||
AnalyticsTableRow,
|
||||
AnalyticsTableSortDirectionValue,
|
||||
} from './analytics-table-types.ts'
|
||||
import ProjectCell from './ProjectCell.vue'
|
||||
import { useAnalyticsTableGraphSelection } from './use-analytics-table-graph-selection.ts'
|
||||
import { useAnalyticsTablePagination } from './use-analytics-table-pagination.ts'
|
||||
import { useAnalyticsTableRowCache } from './use-analytics-table-row-cache.ts'
|
||||
@@ -221,7 +288,15 @@ const {
|
||||
getRelevantAnalyticsDashboardStats,
|
||||
isLoading,
|
||||
versionNumbersById,
|
||||
versionProjectIdsById,
|
||||
versionProjectNamesById,
|
||||
projectNamesById,
|
||||
projectIconUrlsById,
|
||||
projectOrganizationIdsById,
|
||||
projectOrganizationNamesById,
|
||||
userNamesById,
|
||||
userAvatarUrlsById,
|
||||
dependentProjectTypesById,
|
||||
getVersionDisplayName,
|
||||
getVersionProjectName,
|
||||
} = injectAnalyticsDashboardContext()
|
||||
@@ -263,11 +338,10 @@ const showGraphDatasetSelection = computed(() =>
|
||||
? selectedProjectIdSet.value.size > 1
|
||||
: selectedBreakdowns.value.length > 0,
|
||||
)
|
||||
const showProjectVersionProjectColumn = computed(
|
||||
const includeDependentProjectTooltipContext = computed(
|
||||
() =>
|
||||
selectedBreakdownSet.value.has('version_id') &&
|
||||
!selectedBreakdownSet.value.has('project') &&
|
||||
selectedProjectIdSet.value.size > 1,
|
||||
selectedBreakdownSet.value.has('dependent_project_download') &&
|
||||
!selectedBreakdownSet.value.has('project'),
|
||||
)
|
||||
const includeDateColumn = computed(
|
||||
() =>
|
||||
@@ -314,9 +388,6 @@ const csvExportOptions = computed<OverflowMenuOption[]>(() => {
|
||||
},
|
||||
]
|
||||
})
|
||||
const projectNamesById = computed(
|
||||
() => new Map(projects.value.map((project) => [project.id, project.name])),
|
||||
)
|
||||
const hasAvailableProjects = computed(() => projects.value.length > 0)
|
||||
const analyticsPointCount = computed(() =>
|
||||
timeSlices.value.reduce((sum, slice) => sum + slice.length, 0),
|
||||
@@ -360,8 +431,12 @@ function buildTableRows(mode: AnalyticsTableMode) {
|
||||
timeSlices: timeSlices.value,
|
||||
selectedBreakdowns: selectedBreakdowns.value,
|
||||
selectedProjectIds: selectedProjectIdSet.value,
|
||||
selectedFilters: selectedFilters.value,
|
||||
dependentProjectTypesById: dependentProjectTypesById.value,
|
||||
includeDependentProjectTooltipContext: includeDependentProjectTooltipContext.value,
|
||||
relevantStats: relevantStats.value,
|
||||
projectNamesById: projectNamesById.value,
|
||||
userNamesById: userNamesById.value,
|
||||
getVersionDisplayName,
|
||||
getVersionProjectName,
|
||||
showTimeInBucketLabel: showTimeInBucketLabel.value,
|
||||
@@ -379,12 +454,86 @@ function buildColumns(includeDate: boolean) {
|
||||
selectedBreakdowns: selectedBreakdowns.value,
|
||||
selectedFilters: selectedFilters.value,
|
||||
showBreakdownColumn: showBreakdownColumn.value,
|
||||
showProjectVersionProjectColumn: showProjectVersionProjectColumn.value,
|
||||
formatMessage,
|
||||
getRelevantAnalyticsDashboardStats,
|
||||
})
|
||||
}
|
||||
|
||||
function getProjectIconUrl(projectId: string | undefined) {
|
||||
return projectId ? projectIconUrlsById.value.get(projectId) : undefined
|
||||
}
|
||||
|
||||
function getProjectOrganizationName(projectId: string | undefined) {
|
||||
return projectId ? projectOrganizationNamesById.value.get(projectId) : undefined
|
||||
}
|
||||
|
||||
function getProjectCellLabel(value: unknown) {
|
||||
return typeof value === 'string' ? value : String(value ?? '')
|
||||
}
|
||||
|
||||
function getUserAvatarUrl(userId: string | undefined) {
|
||||
return userId ? userAvatarUrlsById.value.get(userId) : undefined
|
||||
}
|
||||
|
||||
function getUserCellLabel(value: unknown) {
|
||||
return typeof value === 'string' ? value : String(value ?? '')
|
||||
}
|
||||
|
||||
function getUserPageHref(userId: string | undefined) {
|
||||
if (!userId) return undefined
|
||||
const username = userNamesById.value.get(userId) ?? userId
|
||||
|
||||
return `/user/${encodeURIComponent(username)}`
|
||||
}
|
||||
|
||||
function getProjectPageHref(projectId: string | undefined) {
|
||||
return projectId ? `/project/${encodeURIComponent(projectId)}` : undefined
|
||||
}
|
||||
|
||||
function getProjectOrganizationPageHref(projectId: string | undefined) {
|
||||
if (!projectId) return undefined
|
||||
const organizationId = projectOrganizationIdsById.value.get(projectId)
|
||||
if (!organizationId) return undefined
|
||||
|
||||
return `/organization/${encodeURIComponent(organizationId)}`
|
||||
}
|
||||
|
||||
function getVersionPageHref(versionId: string | undefined) {
|
||||
if (!versionId) return undefined
|
||||
const projectId = versionProjectIdsById.value.get(versionId)
|
||||
if (!projectId) return undefined
|
||||
|
||||
return `/project/${encodeURIComponent(projectId)}/version/${encodeURIComponent(versionId)}`
|
||||
}
|
||||
|
||||
function isMissingDependentProjectValue(value: string | undefined) {
|
||||
return isUnknownAnalyticsBreakdownValue(value) || isNoDependentAnalyticsBreakdownValue(value)
|
||||
}
|
||||
|
||||
function getDependentProjectTooltip(row: AnalyticsTableRow) {
|
||||
if (isNoDependentAnalyticsBreakdownValue(row.breakdownValues.dependent_project_download)) {
|
||||
return formatMessage(analyticsMessages.noDependentTooltip)
|
||||
}
|
||||
if (isUnknownAnalyticsBreakdownValue(row.breakdownValues.dependent_project_download)) {
|
||||
return formatMessage(analyticsMessages.unknown)
|
||||
}
|
||||
|
||||
const dependencyProjectIds = new Set(row.dependentOnProjectIds)
|
||||
if (row.dependentOnProjectId) {
|
||||
dependencyProjectIds.add(row.dependentOnProjectId)
|
||||
}
|
||||
|
||||
const dependencyProjectNames = [...dependencyProjectIds]
|
||||
.map((projectId) => projectNamesById.value.get(projectId) ?? projectId)
|
||||
.sort((left, right) => left.localeCompare(right))
|
||||
|
||||
return dependencyProjectNames.length > 0
|
||||
? formatMessage(analyticsChartMessages.dependentOnProjectTooltip, {
|
||||
project: dependencyProjectNames.join(', '),
|
||||
})
|
||||
: undefined
|
||||
}
|
||||
|
||||
watch(
|
||||
activeColumns,
|
||||
(nextColumns) => {
|
||||
@@ -445,6 +594,9 @@ watch(
|
||||
selectedBreakdowns,
|
||||
selectedFilters,
|
||||
projects,
|
||||
dependentProjectTypesById,
|
||||
projectNamesById,
|
||||
userNamesById,
|
||||
versionNumbersById,
|
||||
versionProjectNamesById,
|
||||
],
|
||||
|
||||
+27
-2
@@ -7,6 +7,10 @@ import type {
|
||||
AnalyticsSelectedBreakdowns,
|
||||
} from '~/providers/analytics/analytics'
|
||||
|
||||
import {
|
||||
isNoDependentAnalyticsBreakdownValue,
|
||||
isUnknownAnalyticsBreakdownValue,
|
||||
} from '../breakdown'
|
||||
import { getAnalyticsTableMetricSortedGraphDatasetIds } from './analytics-table-sorting'
|
||||
import type { AnalyticsTableColumnKey, AnalyticsTableRow } from './analytics-table-types'
|
||||
|
||||
@@ -58,6 +62,9 @@ export function useAnalyticsTableGraphSelection({
|
||||
const filteredSelectableGraphDatasetIds = computed(() =>
|
||||
getAnalyticsTableSelectableGraphDatasetIds(filteredRows.value),
|
||||
)
|
||||
const excludedGraphDatasetIds = computed(() =>
|
||||
getAnalyticsTableExcludedGraphDatasetIds(sortedRows.value),
|
||||
)
|
||||
const sortedMetricGraphDatasetIds = computed(() =>
|
||||
getAnalyticsTableMetricSortedGraphDatasetIds(sortedRows.value, sortColumn.value, sortCollator),
|
||||
)
|
||||
@@ -65,7 +72,9 @@ export function useAnalyticsTableGraphSelection({
|
||||
const sortedMetricIds = sortedMetricGraphDatasetIds.value
|
||||
const defaultIds =
|
||||
sortedMetricIds.length > 0 ? sortedMetricIds : selectableGraphDatasetIds.value
|
||||
return defaultIds.slice(0, graphDatasetSelectionLimit)
|
||||
return defaultIds
|
||||
.filter((id) => !excludedGraphDatasetIds.value.has(id))
|
||||
.slice(0, graphDatasetSelectionLimit)
|
||||
})
|
||||
const tableSelectedGraphDatasetIds = computed<unknown[]>({
|
||||
get: () => selectedGraphDatasetIds.value,
|
||||
@@ -149,7 +158,9 @@ export function useAnalyticsTableGraphSelection({
|
||||
defaultGraphDatasetIds.value = nextShowGraphDatasetSelection
|
||||
? [...nextDefaultGraphDatasetIds]
|
||||
: []
|
||||
topGraphDatasetIds.value = nextShowGraphDatasetSelection ? [...nextTopGraphDatasetIds] : []
|
||||
topGraphDatasetIds.value = nextShowGraphDatasetSelection
|
||||
? nextTopGraphDatasetIds.filter((id) => !excludedGraphDatasetIds.value.has(id))
|
||||
: []
|
||||
},
|
||||
{ immediate: true },
|
||||
)
|
||||
@@ -184,6 +195,20 @@ export function useAnalyticsTableGraphSelection({
|
||||
return Array.from(new Set(rows.map((row) => row.graphDatasetId)))
|
||||
}
|
||||
|
||||
function getAnalyticsTableExcludedGraphDatasetIds(rows: AnalyticsTableRow[]): Set<string> {
|
||||
return new Set(
|
||||
rows
|
||||
.filter((row) =>
|
||||
Object.values(row.breakdownValues).some(
|
||||
(value) =>
|
||||
isUnknownAnalyticsBreakdownValue(value) ||
|
||||
isNoDependentAnalyticsBreakdownValue(value),
|
||||
),
|
||||
)
|
||||
.map((row) => row.graphDatasetId),
|
||||
)
|
||||
}
|
||||
|
||||
return {
|
||||
filteredSelectableGraphDatasetIds,
|
||||
tableSelectedGraphDatasetIds,
|
||||
|
||||
@@ -6,6 +6,7 @@ import { formatAnalyticsDownloadSourceLabel, type FormatMessage } from './analyt
|
||||
|
||||
export const ALL_BREAKDOWN_VALUE = '__all__'
|
||||
export const UNKNOWN_BREAKDOWN_VALUE = '__unknown__'
|
||||
export const NO_DEPENDENT_BREAKDOWN_VALUE = '__no_dependent__'
|
||||
export const COMBINED_BREAKDOWN_LABEL_SEPARATOR = ' + '
|
||||
export const COMBINED_BREAKDOWN_DATASET_ID_PREFIX = 'breakdowns:'
|
||||
|
||||
@@ -41,6 +42,19 @@ export function getAnalyticsBreakdownValue(
|
||||
'reason' in point ? point.reason : undefined,
|
||||
UNKNOWN_BREAKDOWN_VALUE,
|
||||
)
|
||||
case 'user_id':
|
||||
return normalizeBreakdownValue('user_id' in point ? point.user_id : undefined)
|
||||
case 'dependent_project_download': {
|
||||
const dependentProjectId = normalizeBreakdownValue(
|
||||
'dependent_project_id' in point ? point.dependent_project_id : undefined,
|
||||
UNKNOWN_BREAKDOWN_VALUE,
|
||||
)
|
||||
const downloadReason = 'reason' in point ? point.reason?.trim().toLowerCase() : undefined
|
||||
return dependentProjectId === UNKNOWN_BREAKDOWN_VALUE &&
|
||||
(downloadReason === 'standalone' || downloadReason === 'update')
|
||||
? NO_DEPENDENT_BREAKDOWN_VALUE
|
||||
: dependentProjectId
|
||||
}
|
||||
case 'version_id':
|
||||
return normalizeBreakdownValue('version_id' in point ? point.version_id : undefined)
|
||||
case 'loader':
|
||||
@@ -94,16 +108,30 @@ export function getDownloadSourceLabel(value: string, formatMessage: FormatMessa
|
||||
return formatAnalyticsDownloadSourceLabel(value, formatMessage)
|
||||
}
|
||||
|
||||
export function isUnknownAnalyticsBreakdownValue(value: string | null | undefined): boolean {
|
||||
const normalized = value?.trim()
|
||||
if (!normalized) {
|
||||
return false
|
||||
}
|
||||
|
||||
const normalizedLowercase = normalized.toLowerCase()
|
||||
return (
|
||||
normalized === UNKNOWN_BREAKDOWN_VALUE ||
|
||||
normalizedLowercase === 'unknown' ||
|
||||
normalizedLowercase === 'other'
|
||||
)
|
||||
}
|
||||
|
||||
export function isNoDependentAnalyticsBreakdownValue(value: string | null | undefined): boolean {
|
||||
return value?.trim() === NO_DEPENDENT_BREAKDOWN_VALUE
|
||||
}
|
||||
|
||||
function normalizeBreakdownValue(
|
||||
value: string | undefined,
|
||||
fallback = ALL_BREAKDOWN_VALUE,
|
||||
): string {
|
||||
const normalized = value?.trim()
|
||||
const normalizedLowercase = normalized?.toLowerCase()
|
||||
if (
|
||||
fallback === UNKNOWN_BREAKDOWN_VALUE &&
|
||||
(normalizedLowercase === 'unknown' || normalizedLowercase === 'other')
|
||||
) {
|
||||
if (fallback === UNKNOWN_BREAKDOWN_VALUE && isUnknownAnalyticsBreakdownValue(normalized)) {
|
||||
return fallback
|
||||
}
|
||||
return normalized && normalized.length > 0 ? normalized : fallback
|
||||
|
||||
@@ -25,10 +25,25 @@
|
||||
|
||||
<template #option="{ category, option, selected }">
|
||||
<div class="flex min-w-0 flex-1 items-center gap-2">
|
||||
<template v-if="category.key === 'version_id'">
|
||||
<span
|
||||
v-if="category.key === 'user_id'"
|
||||
v-tooltip="option.label"
|
||||
class="flex size-6 shrink-0 items-center justify-center overflow-hidden rounded-full text-primary"
|
||||
:class="selected ? 'text-contrast' : 'text-primary'"
|
||||
>
|
||||
<img
|
||||
v-if="getUserAvatarUrl(option.value)"
|
||||
:src="getUserAvatarUrl(option.value)"
|
||||
:alt="option.label"
|
||||
class="h-6 w-6 rounded-full object-cover"
|
||||
/>
|
||||
<UserIcon v-else class="h-full w-full" />
|
||||
</span>
|
||||
<template
|
||||
v-for="metadata in getFilterOptionProjectMetadata(category.key, option.value)"
|
||||
:key="`${category.key}-${option.value}-${metadata.name}`"
|
||||
>
|
||||
<span
|
||||
v-for="metadata in getProjectVersionOptionProjectMetadata(option.value)"
|
||||
:key="`${option.value}-${metadata.name}`"
|
||||
v-tooltip="metadata.name"
|
||||
class="flex size-6 shrink-0 items-center justify-center overflow-hidden rounded text-primary"
|
||||
>
|
||||
@@ -42,6 +57,8 @@
|
||||
</span>
|
||||
</template>
|
||||
<span
|
||||
:ref="(element) => setFilterOptionLabelRef(category.key, option.value, element)"
|
||||
v-tooltip="getFilterOptionLabelTooltip(category.key, option.value, option.label)"
|
||||
class="min-w-0 truncate font-semibold leading-tight"
|
||||
:class="selected ? 'text-contrast' : 'text-primary'"
|
||||
>
|
||||
@@ -179,16 +196,24 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { BoxIcon } from '@modrinth/assets'
|
||||
import { BoxIcon, UserIcon } from '@modrinth/assets'
|
||||
import {
|
||||
buildDependentsSearchFilters,
|
||||
DropdownFilterBar,
|
||||
type DropdownFilterBarCategory,
|
||||
type DropdownFilterBarOption,
|
||||
injectModrinthClient,
|
||||
injectNotificationManager,
|
||||
type ProjectType,
|
||||
Tabs,
|
||||
type TabsTab,
|
||||
type TabsValue,
|
||||
truncatedTooltip,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { formatProjectType } from '@modrinth/utils'
|
||||
import { useQuery } from '@tanstack/vue-query'
|
||||
import type { ComponentPublicInstance } from 'vue'
|
||||
|
||||
import { useFormattedCountries } from '@/composables/country.ts'
|
||||
import {
|
||||
@@ -258,6 +283,8 @@ const props = withDefaults(
|
||||
)
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
const client = injectModrinthClient()
|
||||
const { addNotification } = injectNotificationManager()
|
||||
const {
|
||||
hasProjectContext,
|
||||
projects,
|
||||
@@ -277,6 +304,9 @@ const {
|
||||
versionPublishedDatesById,
|
||||
versionProjectNamesById,
|
||||
versionProjectIconUrlsById,
|
||||
projectNamesById,
|
||||
userNamesById,
|
||||
userAvatarUrlsById,
|
||||
getVersionDisplayName,
|
||||
} = injectAnalyticsDashboardContext()
|
||||
const formattedCountries = useFormattedCountries()
|
||||
@@ -290,6 +320,17 @@ const gameVersionTypeTabs = computed<TabsTab[]>(() => [
|
||||
{ value: 'release', label: formatMessage(analyticsMessages.releaseTab) },
|
||||
{ value: 'all', label: formatMessage(analyticsMessages.allTab) },
|
||||
])
|
||||
const dependentProjectSearchProjectTypes: readonly ProjectType[] = [
|
||||
'mod',
|
||||
'modpack',
|
||||
'resourcepack',
|
||||
'shader',
|
||||
'datapack',
|
||||
'plugin',
|
||||
]
|
||||
const dependentProjectInitialSearchLimit = 100
|
||||
const dependentProjectQuerySearchLimit = 500
|
||||
const dependentProjectSearchDebounceMs = 250
|
||||
const resolvedAddLabel = computed(
|
||||
() => props.addLabel ?? formatMessage(analyticsMessages.addButton),
|
||||
)
|
||||
@@ -306,14 +347,16 @@ const projectStatusFilterOptions = computed<DropdownFilterBarOption[]>(() =>
|
||||
})),
|
||||
)
|
||||
const selectedProjectIdSet = computed(() => new Set(selectedProjectIds.value))
|
||||
const effectiveSelectedProjectCount = computed(
|
||||
() =>
|
||||
projects.value.filter(
|
||||
const effectiveSelectedProjectIds = computed(() =>
|
||||
projects.value
|
||||
.filter(
|
||||
(project) =>
|
||||
selectedProjectIdSet.value.has(project.id) &&
|
||||
doesProjectStatusMatchFilters(project.status, selectedFilters.value),
|
||||
).length,
|
||||
)
|
||||
.map((project) => project.id),
|
||||
)
|
||||
const effectiveSelectedProjectCount = computed(() => effectiveSelectedProjectIds.value.length)
|
||||
const showProjectVersionProjectIcons = computed(() => effectiveSelectedProjectCount.value > 1)
|
||||
const defaultSelectedBreakdown = computed(() =>
|
||||
getDefaultAnalyticsBreakdownPresets(selectedProjectIds.value),
|
||||
@@ -330,12 +373,72 @@ const projectVersionFilterOptions = shallowRef<ProjectVersionFilterOption[]>([])
|
||||
const projectVersionFilterOptionProjectMetadataById = shallowRef(
|
||||
new Map<string, ProjectVersionFilterOptionProjectMetadata[]>(),
|
||||
)
|
||||
const dependentProjectSearchInput = ref('')
|
||||
const dependentProjectSearchQuery = ref('')
|
||||
const draftSelectedFilters = ref<AnalyticsSelectedFilters>(
|
||||
cloneSelectedFilters(selectedFilters.value),
|
||||
)
|
||||
let selectedFiltersCommitRequestId = 0
|
||||
let projectVersionFilterOptionsCacheKey = ''
|
||||
let projectVersionFilterOptionProjectMetadataCacheKey = ''
|
||||
let dependentProjectSearchDebounceTimeout: ReturnType<typeof setTimeout> | null = null
|
||||
const filterOptionLabelElements = new Map<string, HTMLElement>()
|
||||
const filterOptionLabelRefUpdateToken = ref(0)
|
||||
|
||||
const dependentProjectSearchFilters = computed(() =>
|
||||
buildDependentsSearchFilters(
|
||||
dependentProjectSearchProjectTypes,
|
||||
effectiveSelectedProjectIds.value,
|
||||
),
|
||||
)
|
||||
const dependentProjectSearchQueryValue = computed(() => dependentProjectSearchQuery.value.trim())
|
||||
const dependentProjectSearchResultLimit = computed(() =>
|
||||
dependentProjectSearchQueryValue.value.length > 0
|
||||
? dependentProjectQuerySearchLimit
|
||||
: dependentProjectInitialSearchLimit,
|
||||
)
|
||||
const selectedDependentProjectIds = computed(() => [
|
||||
...new Set([
|
||||
...selectedFilters.value.dependent_project_id,
|
||||
...draftSelectedFilters.value.dependent_project_id,
|
||||
]),
|
||||
])
|
||||
const { data: dependentProjectSearchResults, error: dependentProjectSearchError } = useQuery({
|
||||
queryKey: computed(() => [
|
||||
'analytics',
|
||||
'query-filter',
|
||||
'dependent-project-search',
|
||||
dependentProjectSearchFilters.value,
|
||||
dependentProjectSearchQueryValue.value,
|
||||
dependentProjectSearchResultLimit.value,
|
||||
]),
|
||||
queryFn: () =>
|
||||
client.labrinth.projects_v2.search({
|
||||
query: dependentProjectSearchQueryValue.value || undefined,
|
||||
new_filters: dependentProjectSearchFilters.value,
|
||||
limit: dependentProjectSearchResultLimit.value,
|
||||
index: 'downloads',
|
||||
}),
|
||||
enabled: computed(
|
||||
() =>
|
||||
effectiveSelectedProjectIds.value.length > 0 &&
|
||||
dependentProjectSearchFilters.value.length > 0,
|
||||
),
|
||||
placeholderData: (previousData) => previousData,
|
||||
refetchOnWindowFocus: false,
|
||||
})
|
||||
const { data: selectedDependentProjects } = useQuery({
|
||||
queryKey: computed(() => [
|
||||
'analytics',
|
||||
'query-filter',
|
||||
'selected-dependent-projects',
|
||||
selectedDependentProjectIds.value,
|
||||
]),
|
||||
queryFn: () => client.labrinth.projects_v2.getMultiple(selectedDependentProjectIds.value),
|
||||
enabled: computed(() => selectedDependentProjectIds.value.length > 0),
|
||||
placeholderData: [],
|
||||
refetchOnWindowFocus: false,
|
||||
})
|
||||
|
||||
const selectedFilterValue = computed<Record<string, string[]>>({
|
||||
get: () => getSelectedFilterBarValue(),
|
||||
@@ -374,6 +477,27 @@ watch(queryResetToken, () => {
|
||||
clearDownloadsThresholds()
|
||||
})
|
||||
|
||||
watch(dependentProjectSearchInput, (query) => {
|
||||
if (dependentProjectSearchDebounceTimeout) {
|
||||
clearTimeout(dependentProjectSearchDebounceTimeout)
|
||||
}
|
||||
|
||||
dependentProjectSearchDebounceTimeout = setTimeout(() => {
|
||||
dependentProjectSearchQuery.value = query.trim()
|
||||
dependentProjectSearchDebounceTimeout = null
|
||||
}, dependentProjectSearchDebounceMs)
|
||||
})
|
||||
|
||||
watch(dependentProjectSearchError, (error) => {
|
||||
if (!error) return
|
||||
|
||||
addNotification({
|
||||
title: 'Dependent projects failed to load',
|
||||
text: getDependentProjectSearchErrorMessage(error),
|
||||
type: 'error',
|
||||
})
|
||||
})
|
||||
|
||||
watch(
|
||||
selectedFilters,
|
||||
(nextFilters, previousFilters) => {
|
||||
@@ -475,6 +599,12 @@ watch(
|
||||
{ immediate: true },
|
||||
)
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
if (dependentProjectSearchDebounceTimeout) {
|
||||
clearTimeout(dependentProjectSearchDebounceTimeout)
|
||||
}
|
||||
})
|
||||
|
||||
async function scheduleSelectedFiltersCommit() {
|
||||
const requestId = ++selectedFiltersCommitRequestId
|
||||
const nextFilters = cloneSelectedFilters(draftSelectedFilters.value)
|
||||
@@ -577,6 +707,40 @@ const filterCategories = computed<DropdownFilterBarCategory[]>(() => {
|
||||
label: formatMessage(analyticsBreakdownMessages.loader),
|
||||
options: withSelectedOptions('loader_type', loaderTypeFilterOptions.value),
|
||||
},
|
||||
{
|
||||
key: 'dependent_project_id',
|
||||
label: formatMessage(analyticsBreakdownMessages.dependentProjectDownload),
|
||||
searchable: true,
|
||||
disableLocalOptionsFilter: true,
|
||||
searchPlaceholder: formatMessage(analyticsMessages.searchDependentProjectsPlaceholder),
|
||||
emptyOptionsLabel: analyticsFilterOptionsEmptyLabel.value,
|
||||
emptySearchLabel: analyticsFilterOptionsEmptyLabel.value,
|
||||
onSearchQueryChange: setDependentProjectSearchInput,
|
||||
options: withSelectedOptions('dependent_project_id', dependentProjectFilterOptions.value),
|
||||
submenuClass: 'w-fit min-w-[18rem]',
|
||||
previewDropdownWidth: 'fit-content',
|
||||
previewDropdownMinWidth: '18rem',
|
||||
},
|
||||
{
|
||||
key: 'dependent_project_type',
|
||||
label: formatMessage(analyticsBreakdownMessages.dependentProjectType),
|
||||
options: withSelectedOptions(
|
||||
'dependent_project_type',
|
||||
dependentProjectTypeFilterOptions.value,
|
||||
),
|
||||
},
|
||||
{
|
||||
key: 'user_id',
|
||||
label: formatMessage(analyticsBreakdownMessages.members),
|
||||
searchable: memberFilterOptions.value.length > 6,
|
||||
searchPlaceholder: formatMessage(analyticsMessages.searchMembersPlaceholder),
|
||||
emptyOptionsLabel: analyticsFilterOptionsEmptyLabel.value,
|
||||
emptySearchLabel: analyticsFilterOptionsEmptyLabel.value,
|
||||
options: withSelectedOptions('user_id', memberFilterOptions.value),
|
||||
submenuClass: 'w-fit min-w-[14rem]',
|
||||
previewDropdownWidth: 'fit-content',
|
||||
previewDropdownMinWidth: '14rem',
|
||||
},
|
||||
)
|
||||
|
||||
return categories.filter((category) =>
|
||||
@@ -636,6 +800,16 @@ const downloadReasonFilterOptions = computed<DropdownFilterBarOption[]>(() =>
|
||||
})),
|
||||
)
|
||||
|
||||
const memberFilterOptions = computed<DropdownFilterBarOption[]>(() =>
|
||||
filterOptions.value.userIds
|
||||
.map((userId) => ({
|
||||
value: userId,
|
||||
label: getUserFilterOptionLabel(userId),
|
||||
searchTerms: [userId],
|
||||
}))
|
||||
.sort((left, right) => left.label.localeCompare(right.label)),
|
||||
)
|
||||
|
||||
const gameVersionFilterOptions = computed<DropdownFilterBarOption[]>(() =>
|
||||
filterOptions.value.gameVersions
|
||||
.filter((gameVersion) => {
|
||||
@@ -668,6 +842,45 @@ const loaderTypeFilterOptions = computed<DropdownFilterBarOption[]>(() =>
|
||||
.sort((left, right) => left.label.localeCompare(right.label)),
|
||||
)
|
||||
|
||||
const dependentProjectSearchResultsById = computed(
|
||||
() =>
|
||||
new Map(
|
||||
(dependentProjectSearchResults.value?.hits ?? []).map((project) => [
|
||||
project.project_id,
|
||||
project,
|
||||
]),
|
||||
),
|
||||
)
|
||||
const selectedDependentProjectsById = computed(
|
||||
() => new Map((selectedDependentProjects.value ?? []).map((project) => [project.id, project])),
|
||||
)
|
||||
|
||||
const dependentProjectFilterOptions = computed<DropdownFilterBarOption[]>(() => {
|
||||
const optionsById = new Map<string, DropdownFilterBarOption>()
|
||||
|
||||
for (const project of dependentProjectSearchResults.value?.hits ?? []) {
|
||||
optionsById.set(project.project_id, {
|
||||
value: project.project_id,
|
||||
label: project.title,
|
||||
searchTerms: [project.project_id, project.slug, project.author].filter(
|
||||
(term): term is string => Boolean(term),
|
||||
),
|
||||
})
|
||||
}
|
||||
|
||||
return [...optionsById.values()]
|
||||
})
|
||||
|
||||
const dependentProjectTypeFilterOptions = computed<DropdownFilterBarOption[]>(() =>
|
||||
filterOptions.value.dependentProjectTypes
|
||||
.map((projectType) => ({
|
||||
value: projectType,
|
||||
label: getProjectTypeFilterOptionLabel(projectType),
|
||||
searchTerms: [projectType],
|
||||
}))
|
||||
.sort((left, right) => left.label.localeCompare(right.label)),
|
||||
)
|
||||
|
||||
function isAnalyticsFilterValueCategory(
|
||||
categoryKey: string,
|
||||
): categoryKey is AnalyticsFilterValueCategory {
|
||||
@@ -697,15 +910,77 @@ function getMissingSelectedOptionLabel(
|
||||
if (categoryKey === 'download_reason') {
|
||||
return getDownloadReasonFilterOptionLabel
|
||||
}
|
||||
if (categoryKey === 'user_id') {
|
||||
return getUserFilterOptionLabel
|
||||
}
|
||||
if (categoryKey === 'user_agent') {
|
||||
return (value) => getDownloadSourceLabel(value, formatMessage)
|
||||
}
|
||||
if (categoryKey === 'loader_type') {
|
||||
return getLoaderTypeFilterOptionLabel
|
||||
}
|
||||
if (categoryKey === 'dependent_project_id') {
|
||||
return getDependentProjectFilterOptionLabel
|
||||
}
|
||||
if (categoryKey === 'dependent_project_type') {
|
||||
return getProjectTypeFilterOptionLabel
|
||||
}
|
||||
return undefined
|
||||
}
|
||||
|
||||
function getUserAvatarUrl(userId: string): string | undefined {
|
||||
return userAvatarUrlsById.value.get(userId)
|
||||
}
|
||||
|
||||
function setFilterOptionLabelRef(
|
||||
categoryKey: string,
|
||||
optionValue: string,
|
||||
element: Element | ComponentPublicInstance | null,
|
||||
) {
|
||||
const key = getFilterOptionLabelElementKey(categoryKey, optionValue)
|
||||
if (element instanceof HTMLElement) {
|
||||
if (filterOptionLabelElements.get(key) === element) {
|
||||
return
|
||||
}
|
||||
|
||||
filterOptionLabelElements.set(key, element)
|
||||
filterOptionLabelRefUpdateToken.value++
|
||||
return
|
||||
}
|
||||
|
||||
if (filterOptionLabelElements.delete(key)) {
|
||||
filterOptionLabelRefUpdateToken.value++
|
||||
}
|
||||
}
|
||||
|
||||
function getFilterOptionLabelTooltip(
|
||||
categoryKey: string,
|
||||
optionValue: string,
|
||||
label: string,
|
||||
): string | undefined {
|
||||
void filterOptionLabelRefUpdateToken.value
|
||||
|
||||
return truncatedTooltip(
|
||||
filterOptionLabelElements.get(getFilterOptionLabelElementKey(categoryKey, optionValue)),
|
||||
label,
|
||||
)
|
||||
}
|
||||
|
||||
function getFilterOptionLabelElementKey(categoryKey: string, optionValue: string) {
|
||||
return `${categoryKey}\x1f${optionValue}`
|
||||
}
|
||||
|
||||
function getFilterOptionProjectMetadata(categoryKey: string, optionValue: string) {
|
||||
if (categoryKey === 'version_id') {
|
||||
return getProjectVersionOptionProjectMetadata(optionValue)
|
||||
}
|
||||
if (categoryKey === 'dependent_project_id') {
|
||||
return getDependentProjectOptionProjectMetadata(optionValue)
|
||||
}
|
||||
|
||||
return []
|
||||
}
|
||||
|
||||
function getProjectVersionOptionProjectMetadata(versionId: string) {
|
||||
if (!showProjectVersionProjectIcons.value) {
|
||||
return []
|
||||
@@ -714,6 +989,24 @@ function getProjectVersionOptionProjectMetadata(versionId: string) {
|
||||
return projectVersionFilterOptionProjectMetadataById.value.get(versionId) ?? []
|
||||
}
|
||||
|
||||
function getDependentProjectOptionProjectMetadata(projectId: string) {
|
||||
const searchResult = dependentProjectSearchResultsById.value.get(projectId)
|
||||
const selectedProject = selectedDependentProjectsById.value.get(projectId)
|
||||
const name =
|
||||
searchResult?.title ??
|
||||
selectedProject?.title ??
|
||||
projectNamesById.value.get(projectId) ??
|
||||
projectId
|
||||
const iconUrl = searchResult?.icon_url ?? selectedProject?.icon_url
|
||||
|
||||
return [
|
||||
{
|
||||
name,
|
||||
...(iconUrl ? { iconUrl } : {}),
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
function getCountryFilterOptionLabel(countryCode: string): string {
|
||||
const normalizedCode = countryCode.trim().toUpperCase()
|
||||
if (normalizedCode === 'XX') {
|
||||
@@ -731,10 +1024,51 @@ function getLoaderTypeFilterOptionLabel(loaderType: string): string {
|
||||
return formatAnalyticsLoaderLabel(loaderType, formatMessage)
|
||||
}
|
||||
|
||||
function getProjectTypeFilterOptionLabel(projectType: string): string {
|
||||
return formatProjectType(projectType)
|
||||
}
|
||||
|
||||
function getDependentProjectFilterOptionLabel(projectId: string): string {
|
||||
return (
|
||||
dependentProjectSearchResultsById.value.get(projectId)?.title ??
|
||||
selectedDependentProjectsById.value.get(projectId)?.title ??
|
||||
projectNamesById.value.get(projectId) ??
|
||||
projectId
|
||||
)
|
||||
}
|
||||
|
||||
function getDownloadReasonFilterOptionLabel(reason: string): string {
|
||||
return formatAnalyticsDownloadReasonLabel(reason, formatMessage)
|
||||
}
|
||||
|
||||
function getUserFilterOptionLabel(userId: string): string {
|
||||
return userNamesById.value.get(userId) ?? userId
|
||||
}
|
||||
|
||||
function setDependentProjectSearchInput(query: string) {
|
||||
dependentProjectSearchInput.value = query
|
||||
}
|
||||
|
||||
function getDependentProjectSearchErrorMessage(error: unknown): string {
|
||||
if (error && typeof error === 'object') {
|
||||
const dataDescription = (error as { data?: { description?: unknown } }).data?.description
|
||||
if (typeof dataDescription === 'string' && dataDescription.length > 0) {
|
||||
return dataDescription
|
||||
}
|
||||
|
||||
const message = (error as { message?: unknown }).message
|
||||
if (typeof message === 'string' && message.length > 0) {
|
||||
return message
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof error === 'string' && error.length > 0) {
|
||||
return error
|
||||
}
|
||||
|
||||
return 'Please try searching again or changing the selected projects.'
|
||||
}
|
||||
|
||||
function getDateTimestamp(date: string | undefined): number | undefined {
|
||||
if (!date) {
|
||||
return undefined
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
:placeholder="formatMessage(analyticsMessages.selectProjects)"
|
||||
:no-options-message="noProjectsMessage"
|
||||
:searchable="projectOptions.length > 6"
|
||||
fuzzy-search
|
||||
:max-tag-rows="1"
|
||||
:trigger-class="analyticsQueryChipTriggerClass"
|
||||
fit-content
|
||||
@@ -79,7 +80,7 @@
|
||||
@keydown.enter.stop
|
||||
@keydown.space.stop
|
||||
>
|
||||
<LayersIcon
|
||||
<UserIcon
|
||||
class="h-5 w-5 shrink-0 text-primary"
|
||||
:class="isUserProjectsOptionSelected ? 'text-contrast' : 'text-primary'"
|
||||
/>
|
||||
@@ -211,6 +212,7 @@
|
||||
:placeholder="formatMessage(analyticsMessages.selectProjects)"
|
||||
:no-options-message="noProjectsMessage"
|
||||
:searchable="projectOptions.length > 6"
|
||||
fuzzy-search
|
||||
:max-tag-rows="1"
|
||||
checkbox-position="right"
|
||||
show-selection-actions
|
||||
@@ -290,7 +292,7 @@
|
||||
@keydown.enter.stop
|
||||
@keydown.space.stop
|
||||
>
|
||||
<LayersIcon
|
||||
<UserIcon
|
||||
class="h-5 w-5 shrink-0 text-primary"
|
||||
:class="isUserProjectsOptionSelected ? 'text-contrast' : 'text-primary'"
|
||||
/>
|
||||
@@ -449,6 +451,7 @@ import {
|
||||
ClockIcon,
|
||||
FolderOpenIcon,
|
||||
LayersIcon,
|
||||
UserIcon,
|
||||
} from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
@@ -499,7 +502,7 @@ import {
|
||||
import TimeFramePicker from './TimeframePicker.vue'
|
||||
|
||||
const QUERY_BUILDER_DROPDOWN_MAX_HEIGHT = 500
|
||||
const QUERY_BUILDER_DROPDOWN_MIN_WIDTH = '12rem'
|
||||
const QUERY_BUILDER_DROPDOWN_MIN_WIDTH = '14rem'
|
||||
const analyticsQueryChipTriggerClass = 'h-10 '
|
||||
const analyticsQueryAddFilterButtonClass = '!h-10 max-w-full !w-max !px-3.5 flex !gap-2'
|
||||
const projectOptionCollator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' })
|
||||
@@ -544,7 +547,7 @@ function getProjectOption(
|
||||
return {
|
||||
value: project.id,
|
||||
label: project.name,
|
||||
searchTerms: groupTitle ? [groupTitle] : undefined,
|
||||
searchTerms: [project.id, groupTitle].filter((term): term is string => Boolean(term)),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1008,15 +1011,34 @@ const breakdownOptions = computed<MultiSelectOption<Exclude<AnalyticsBreakdownPr
|
||||
value: 'game_version',
|
||||
label: formatAnalyticsBreakdownLabel('game_version', formatMessage),
|
||||
},
|
||||
{
|
||||
value: 'dependent_project_download',
|
||||
label: formatAnalyticsBreakdownLabel('dependent_project_download', formatMessage),
|
||||
},
|
||||
{
|
||||
value: 'user_id',
|
||||
label: formatAnalyticsBreakdownLabel('user_id', formatMessage),
|
||||
},
|
||||
)
|
||||
|
||||
return options.map((option) => ({
|
||||
...option,
|
||||
disabled: hasReachedBreakdownLimit && !selectedBreakdownSet.has(option.value),
|
||||
}))
|
||||
return options.map((option) => {
|
||||
const isSelected = selectedBreakdownSet.has(option.value)
|
||||
return {
|
||||
...option,
|
||||
disabled:
|
||||
!isSelected && (hasReachedBreakdownLimit || !canSelectBreakdownOption(option.value)),
|
||||
}
|
||||
})
|
||||
},
|
||||
)
|
||||
|
||||
function canSelectBreakdownOption(breakdown: Exclude<AnalyticsBreakdownPreset, 'none'>): boolean {
|
||||
return getAnalyticsBreakdownPresetsForProjectSelection(
|
||||
[...selectedBreakdownValue.value, breakdown],
|
||||
selectedProjectIds.value,
|
||||
).includes(breakdown)
|
||||
}
|
||||
|
||||
function getBreakdownOptionLabel(breakdown: Exclude<AnalyticsBreakdownPreset, 'none'>): string {
|
||||
return (
|
||||
breakdownOptions.value.find((option) => option.value === breakdown)?.label ??
|
||||
@@ -1136,6 +1158,17 @@ function withBreakdownFields(
|
||||
downloads.push('reason')
|
||||
}
|
||||
break
|
||||
case 'user_id':
|
||||
if (includesStat(breakdownStats, 'revenue') && includesStat(enabledStats, 'revenue')) {
|
||||
revenue.push('user_id')
|
||||
}
|
||||
break
|
||||
case 'dependent_project_download':
|
||||
if (includesStat(breakdownStats, 'downloads') && includesStat(enabledStats, 'downloads')) {
|
||||
downloads.push('dependent_project_id')
|
||||
downloads.push('reason')
|
||||
}
|
||||
break
|
||||
case 'version_id':
|
||||
if (includesStat(breakdownStats, 'downloads') && includesStat(enabledStats, 'downloads')) {
|
||||
downloads.push('version_id')
|
||||
@@ -1264,6 +1297,12 @@ function buildMetricFilters(
|
||||
filters.game_version,
|
||||
),
|
||||
loader: getFilterValuesForStat('loader_type', 'downloads', enabledStats, filters.loader_type),
|
||||
dependent_project_id: getFilterValuesForStat(
|
||||
'dependent_project_id',
|
||||
'downloads',
|
||||
enabledStats,
|
||||
filters.dependent_project_id,
|
||||
),
|
||||
},
|
||||
playtime: {
|
||||
country: getFilterValuesForStat('country', 'playtime', enabledStats, filters.country),
|
||||
@@ -1281,7 +1320,9 @@ function buildMetricFilters(
|
||||
),
|
||||
loader: getFilterValuesForStat('loader_type', 'playtime', enabledStats, filters.loader_type),
|
||||
},
|
||||
revenue: {},
|
||||
revenue: {
|
||||
user_id: getFilterValuesForStat('user_id', 'revenue', enabledStats, filters.user_id),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1295,6 +1336,15 @@ const fetchRequest = computed<Labrinth.Analytics.v3.FetchRequest>(() => {
|
||||
|
||||
const bucketBy = withBreakdownFields(selectedBreakdowns.value, selectedFilters.value)
|
||||
const filterBy = buildMetricFilters(selectedBreakdowns.value, selectedFilters.value)
|
||||
if (
|
||||
includesStat(
|
||||
getEnabledAnalyticsStatsForState(selectedBreakdowns.value, selectedFilters.value),
|
||||
'revenue',
|
||||
) &&
|
||||
!bucketBy.revenue.includes('user_id')
|
||||
) {
|
||||
bucketBy.revenue.push('user_id')
|
||||
}
|
||||
const filteredProjectIds = getProjectIdsMatchingStatusFilter(
|
||||
selectedProjectIds.value,
|
||||
projectStatusById.value,
|
||||
|
||||
+68
-6
@@ -2,6 +2,7 @@ import type {
|
||||
AnalyticsBreakdownPreset,
|
||||
AnalyticsDashboardStat,
|
||||
AnalyticsQueryFilterCategory,
|
||||
AnalyticsSelectedBreakdowns,
|
||||
AnalyticsSelectedFilters,
|
||||
} from '~/providers/analytics/analytics'
|
||||
|
||||
@@ -13,6 +14,10 @@ export type AnalyticsDashboardDimension =
|
||||
| 'monetization'
|
||||
| 'user_agent'
|
||||
| 'download_reason'
|
||||
| 'user_id'
|
||||
| 'dependent_project_download'
|
||||
| 'dependent_project_id'
|
||||
| 'dependent_project_type'
|
||||
| 'game_version'
|
||||
| 'loader_type'
|
||||
|
||||
@@ -23,9 +28,12 @@ export const FILTER_VALUE_CATEGORIES: Exclude<AnalyticsQueryFilterCategory, 'pro
|
||||
'monetization',
|
||||
'user_agent',
|
||||
'download_reason',
|
||||
'user_id',
|
||||
'version_id',
|
||||
'game_version',
|
||||
'loader_type',
|
||||
'dependent_project_id',
|
||||
'dependent_project_type',
|
||||
]
|
||||
|
||||
const ANALYTICS_DASHBOARD_STAT_ORDER: AnalyticsDashboardStat[] = [
|
||||
@@ -45,8 +53,12 @@ const ANALYTICS_STATS_BY_DIMENSION: Record<
|
||||
monetization: ['views', 'downloads'],
|
||||
user_agent: ['downloads'],
|
||||
download_reason: ['downloads'],
|
||||
user_id: ['revenue'],
|
||||
dependent_project_download: ['downloads'],
|
||||
dependent_project_type: ['downloads'],
|
||||
game_version: ['downloads', 'playtime'],
|
||||
loader_type: ['downloads', 'playtime'],
|
||||
dependent_project_id: ['downloads'],
|
||||
project_status: ANALYTICS_DASHBOARD_STAT_ORDER,
|
||||
}
|
||||
|
||||
@@ -60,6 +72,8 @@ const ANALYTICS_DIMENSION_BY_BREAKDOWN: Record<
|
||||
monetization: 'monetization',
|
||||
user_agent: 'user_agent',
|
||||
download_reason: 'download_reason',
|
||||
user_id: 'user_id',
|
||||
dependent_project_download: 'dependent_project_download',
|
||||
version_id: 'version_id',
|
||||
loader: 'loader_type',
|
||||
game_version: 'game_version',
|
||||
@@ -74,9 +88,12 @@ const ANALYTICS_DIMENSION_BY_FILTER_CATEGORY: Record<
|
||||
monetization: 'monetization',
|
||||
user_agent: 'user_agent',
|
||||
download_reason: 'download_reason',
|
||||
user_id: 'user_id',
|
||||
version_id: 'version_id',
|
||||
game_version: 'game_version',
|
||||
loader_type: 'loader_type',
|
||||
dependent_project_id: 'dependent_project_id',
|
||||
dependent_project_type: 'dependent_project_type',
|
||||
}
|
||||
|
||||
const ANALYTICS_FILTER_CATEGORY_BY_BREAKDOWN: Record<
|
||||
@@ -89,6 +106,8 @@ const ANALYTICS_FILTER_CATEGORY_BY_BREAKDOWN: Record<
|
||||
monetization: 'monetization',
|
||||
user_agent: 'user_agent',
|
||||
download_reason: 'download_reason',
|
||||
user_id: 'user_id',
|
||||
dependent_project_download: null,
|
||||
version_id: 'version_id',
|
||||
loader: 'loader_type',
|
||||
game_version: 'game_version',
|
||||
@@ -286,6 +305,33 @@ export function getAnalyticsStatsForBreakdowns(
|
||||
return stats
|
||||
}
|
||||
|
||||
export function getAnalyticsBreakdownsWithSharedStats(
|
||||
breakdowns: AnalyticsBreakdownInput,
|
||||
): AnalyticsSelectedBreakdowns {
|
||||
const normalizedBreakdowns = normalizeAnalyticsBreakdowns(breakdowns)
|
||||
const compatibleBreakdowns: AnalyticsSelectedBreakdowns = []
|
||||
let sharedStats: readonly AnalyticsDashboardStat[] | null = null
|
||||
|
||||
for (const breakdown of normalizedBreakdowns) {
|
||||
const breakdownStats = getAnalyticsStatsForBreakdown(breakdown)
|
||||
if (sharedStats === null) {
|
||||
compatibleBreakdowns.push(breakdown)
|
||||
sharedStats = breakdownStats
|
||||
continue
|
||||
}
|
||||
|
||||
const nextSharedStats = intersectAnalyticsStats(sharedStats, breakdownStats)
|
||||
if (nextSharedStats.length === 0) {
|
||||
continue
|
||||
}
|
||||
|
||||
compatibleBreakdowns.push(breakdown)
|
||||
sharedStats = nextSharedStats
|
||||
}
|
||||
|
||||
return compatibleBreakdowns
|
||||
}
|
||||
|
||||
export function getAnalyticsStatsForFilterCategory(
|
||||
category: AnalyticsQueryFilterCategory,
|
||||
): readonly AnalyticsDashboardStat[] {
|
||||
@@ -331,12 +377,20 @@ export function getVisibleAnalyticsFilterCategoriesForState(
|
||||
breakdowns: AnalyticsBreakdownInput,
|
||||
filters: AnalyticsSelectedFilters,
|
||||
): readonly Exclude<AnalyticsQueryFilterCategory, 'project'>[] {
|
||||
return FILTER_VALUE_CATEGORIES.filter((category) =>
|
||||
haveAnalyticsStatOverlap(
|
||||
const normalizedBreakdowns = normalizeAnalyticsBreakdowns(breakdowns)
|
||||
return FILTER_VALUE_CATEGORIES.filter((category) => {
|
||||
if (
|
||||
category === 'dependent_project_type' &&
|
||||
!normalizedBreakdowns.includes('dependent_project_download')
|
||||
) {
|
||||
return false
|
||||
}
|
||||
|
||||
return haveAnalyticsStatOverlap(
|
||||
getAnalyticsStatsForFilterScope(breakdowns, filters, category),
|
||||
getAnalyticsStatsForFilterCategory(category),
|
||||
),
|
||||
)
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
export function sanitizeAnalyticsSelectedFilters(
|
||||
@@ -345,6 +399,7 @@ export function sanitizeAnalyticsSelectedFilters(
|
||||
): AnalyticsSelectedFilters {
|
||||
const nextFilters = cloneSelectedFilters(filters)
|
||||
let availableStats = [...getAnalyticsStatsForBreakdowns(breakdowns)]
|
||||
const normalizedBreakdowns = normalizeAnalyticsBreakdowns(breakdowns)
|
||||
|
||||
for (const category of FILTER_VALUE_CATEGORIES) {
|
||||
if (filters[category].length === 0) {
|
||||
@@ -352,7 +407,11 @@ export function sanitizeAnalyticsSelectedFilters(
|
||||
}
|
||||
|
||||
const categoryStats = getAnalyticsStatsForFilterCategory(category)
|
||||
if (!haveAnalyticsStatOverlap(availableStats, categoryStats)) {
|
||||
if (
|
||||
!haveAnalyticsStatOverlap(availableStats, categoryStats) ||
|
||||
(category === 'dependent_project_type' &&
|
||||
!normalizedBreakdowns.includes('dependent_project_download'))
|
||||
) {
|
||||
nextFilters[category] = []
|
||||
continue
|
||||
}
|
||||
@@ -371,9 +430,12 @@ export function cloneSelectedFilters(filters: AnalyticsSelectedFilters): Analyti
|
||||
monetization: [...filters.monetization],
|
||||
user_agent: [...filters.user_agent],
|
||||
download_reason: [...filters.download_reason],
|
||||
user_id: [...filters.user_id],
|
||||
version_id: [...filters.version_id],
|
||||
game_version: [...filters.game_version],
|
||||
loader_type: [...filters.loader_type],
|
||||
dependent_project_id: [...filters.dependent_project_id],
|
||||
dependent_project_type: [...filters.dependent_project_type],
|
||||
}
|
||||
}
|
||||
|
||||
@@ -456,7 +518,7 @@ export function normalizeSelectedValues(
|
||||
.map((value) => value.trim().toLowerCase())
|
||||
.filter(isProjectStatusFilterValue)
|
||||
}
|
||||
if (categoryKey === 'loader_type') {
|
||||
if (categoryKey === 'loader_type' || categoryKey === 'dependent_project_type') {
|
||||
return Array.from(
|
||||
new Set(
|
||||
selectedValues
|
||||
|
||||
@@ -6,6 +6,7 @@ import {
|
||||
areStringArraysEqual,
|
||||
buildAnalyticsQueryBuilderRouteQuery,
|
||||
getAnalyticsBreakdownPresetsForProjectSelection,
|
||||
hasAnalyticsAllProjectSelectionQuery,
|
||||
hasAnalyticsQueryBuilderRouteChange,
|
||||
readAnalyticsGraphState,
|
||||
readAnalyticsQueryBuilderState,
|
||||
@@ -54,6 +55,7 @@ export interface UseAnalyticsRouteSyncOptions {
|
||||
graph: AnalyticsGraphRefs
|
||||
availableProjectIds: Ref<string[]>
|
||||
defaultProjectIds: Ref<string[]>
|
||||
areProjectsLoaded: Ref<boolean>
|
||||
sanitizeSelectedFilters: (
|
||||
breakdowns: readonly AnalyticsBreakdownPreset[],
|
||||
filters: AnalyticsSelectedFilters,
|
||||
@@ -61,8 +63,14 @@ export interface UseAnalyticsRouteSyncOptions {
|
||||
}
|
||||
|
||||
export function useAnalyticsRouteSync(options: UseAnalyticsRouteSyncOptions) {
|
||||
const { queryBuilder, graph, availableProjectIds, defaultProjectIds, sanitizeSelectedFilters } =
|
||||
options
|
||||
const {
|
||||
queryBuilder,
|
||||
graph,
|
||||
availableProjectIds,
|
||||
defaultProjectIds,
|
||||
areProjectsLoaded,
|
||||
sanitizeSelectedFilters,
|
||||
} = options
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
|
||||
@@ -113,6 +121,10 @@ export function useAnalyticsRouteSync(options: UseAnalyticsRouteSyncOptions) {
|
||||
return
|
||||
}
|
||||
|
||||
if (hasAnalyticsAllProjectSelectionQuery(route.query) && !areProjectsLoaded.value) {
|
||||
return
|
||||
}
|
||||
|
||||
const nextRouteQuery = buildAnalyticsQueryBuilderRouteQuery(
|
||||
route.query,
|
||||
getSelectedAnalyticsQueryBuilderState(),
|
||||
@@ -147,6 +159,10 @@ export function useAnalyticsRouteSync(options: UseAnalyticsRouteSyncOptions) {
|
||||
}
|
||||
|
||||
function applyRouteQueryToState(nextQuery: LocationQuery) {
|
||||
if (hasAnalyticsAllProjectSelectionQuery(nextQuery) && !areProjectsLoaded.value) {
|
||||
return
|
||||
}
|
||||
|
||||
const nextQueryState = readAnalyticsQueryBuilderState(
|
||||
nextQuery,
|
||||
availableProjectIds.value,
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<ButtonStyled circular>
|
||||
<button :class="!collapsed && '[&>svg]:rotate-180'" @click="$emit('toggleCollapsed')">
|
||||
<button :class="{ '[&>svg]:rotate-180': !collapsed }" @click="$emit('toggleCollapsed')">
|
||||
<DropdownIcon class="duration-250 transition-transform ease-in-out" />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
</ButtonStyled>
|
||||
<ButtonStyled v-if="visibleQuickReplies.length > 0">
|
||||
<OverflowMenu :options="visibleQuickReplies">
|
||||
Quick Reply
|
||||
Quick reply
|
||||
<ChevronDownIcon />
|
||||
</OverflowMenu>
|
||||
</ButtonStyled>
|
||||
|
||||
@@ -48,7 +48,6 @@ export const DEFAULT_FEATURE_FLAGS = validateValues({
|
||||
useV1ContentTabAPI: true,
|
||||
labrinthApiCanary: false,
|
||||
dismissedExternalProjectsInfo: false,
|
||||
modpackPermissionsPage: false,
|
||||
showAllBanners: false,
|
||||
alwaysIgnoreErrorBanner: false,
|
||||
showViewProdRouteBanner: false,
|
||||
@@ -56,6 +55,8 @@ export const DEFAULT_FEATURE_FLAGS = validateValues({
|
||||
showModeratorPrivateMessageHighlight: true,
|
||||
archonApiStaging: false,
|
||||
showHostingAccessInstanceAuditLog: false,
|
||||
versionDevInfoCollapsed: true,
|
||||
alwaysShowVersionDevInfo: false,
|
||||
} as const)
|
||||
|
||||
export type FeatureFlag = keyof typeof DEFAULT_FEATURE_FLAGS
|
||||
|
||||
@@ -8,4 +8,11 @@ export const versionQueryOptions = {
|
||||
queryFn: () => client.labrinth.versions_v3.getVersion(versionId),
|
||||
staleTime: STALE_TIME,
|
||||
}),
|
||||
|
||||
fromProject: (projectId: string, versionIdOrNumber: string, client: AbstractModrinthClient) => ({
|
||||
queryKey: ['project', projectId, 'version', 'v3', versionIdOrNumber] as const,
|
||||
queryFn: () =>
|
||||
client.labrinth.versions_v3.getVersionFromIdOrNumber(projectId, versionIdOrNumber),
|
||||
staleTime: STALE_TIME,
|
||||
}),
|
||||
}
|
||||
|
||||
@@ -80,6 +80,9 @@
|
||||
"analytics.project-event.project-status-changed": {
|
||||
"message": "تم تغيير حالة المشروع"
|
||||
},
|
||||
"analytics.project-event.version-released": {
|
||||
"message": ""
|
||||
},
|
||||
"analytics.project-status.draft": {
|
||||
"message": "مسودة"
|
||||
},
|
||||
@@ -506,6 +509,9 @@
|
||||
"create-project-version.create-modal.stage.add-files.admonition": {
|
||||
"message": "الملفات التكميلية تستخدم لدعم الموارد مثل كود المصدر، وليس للإصدارات أو الأنواع البديلة."
|
||||
},
|
||||
"create.collection.collection-info": {
|
||||
"message": "سيتم إنشاء مجموعتك الجديدة كمجموعة عامة تحتوي على {count, plural,\n one {# مشروع}\n other {# مشاريع}\n}."
|
||||
},
|
||||
"create.collection.create-collection": {
|
||||
"message": "إنشاء مجموعة"
|
||||
},
|
||||
|
||||
@@ -74,6 +74,84 @@
|
||||
"analytics.chart.controls.button": {
|
||||
"message": "Ovládání"
|
||||
},
|
||||
"analytics.chart.events.project-title": {
|
||||
"message": "<project>{projectName}</project>: {title}"
|
||||
},
|
||||
"analytics.chart.tooltip.hide-entry": {
|
||||
"message": "Skrýt {name} v grafu"
|
||||
},
|
||||
"analytics.chart.tooltip.show-entry": {
|
||||
"message": "Zobrazit {name} v grafu"
|
||||
},
|
||||
"analytics.chart.view.area": {
|
||||
"message": "Oblast"
|
||||
},
|
||||
"analytics.download-reason.update": {
|
||||
"message": "Aktualizace"
|
||||
},
|
||||
"analytics.downloads.suffix": {
|
||||
"message": "stažení"
|
||||
},
|
||||
"analytics.empty.no-projects": {
|
||||
"message": "Žádné dostupné projekty"
|
||||
},
|
||||
"analytics.empty.no-projects-for-analytics": {
|
||||
"message": "Žádné dostupné projekty pro analýzu "
|
||||
},
|
||||
"analytics.empty.select-project": {
|
||||
"message": "Vyber alespoň jeden projekt pro zobrazení dat"
|
||||
},
|
||||
"analytics.group-by.1h": {
|
||||
"message": "1h"
|
||||
},
|
||||
"analytics.group-by.6h": {
|
||||
"message": "6h"
|
||||
},
|
||||
"analytics.group-by.date": {
|
||||
"message": "Datum"
|
||||
},
|
||||
"analytics.group-by.day": {
|
||||
"message": "Den"
|
||||
},
|
||||
"analytics.group-by.month": {
|
||||
"message": "Měsíc"
|
||||
},
|
||||
"analytics.group-by.week": {
|
||||
"message": "Týden "
|
||||
},
|
||||
"analytics.group-by.year": {
|
||||
"message": "Rok"
|
||||
},
|
||||
"analytics.options.loading": {
|
||||
"message": "Načítání..."
|
||||
},
|
||||
"analytics.project-status.approved": {
|
||||
"message": "Schválený"
|
||||
},
|
||||
"analytics.project-status.archived": {
|
||||
"message": "Archivovaný "
|
||||
},
|
||||
"analytics.project-status.other": {
|
||||
"message": "Jiné"
|
||||
},
|
||||
"analytics.project-status.private": {
|
||||
"message": "Soukromý "
|
||||
},
|
||||
"analytics.project-status.unlisted": {
|
||||
"message": "Neveřejný "
|
||||
},
|
||||
"analytics.project-status.withheld": {
|
||||
"message": "Pozastavený"
|
||||
},
|
||||
"analytics.project.all": {
|
||||
"message": "Všechny projekty"
|
||||
},
|
||||
"analytics.query.label.project": {
|
||||
"message": "Projekt:"
|
||||
},
|
||||
"analytics.value.other": {
|
||||
"message": "Jiné"
|
||||
},
|
||||
"app-marketing.download.description": {
|
||||
"message": "Naše aplikace je dostupná pro všechny počítačové platformy, vyberte si požadovanou verzi."
|
||||
},
|
||||
@@ -470,6 +548,12 @@
|
||||
"conversation-thread.action.add-private-note": {
|
||||
"message": "Přidat soukromou poznámku"
|
||||
},
|
||||
"conversation-thread.action.approve": {
|
||||
"message": "Schválit"
|
||||
},
|
||||
"conversation-thread.action.approve-with-reply": {
|
||||
"message": "Schválit s odpovědí"
|
||||
},
|
||||
"conversation-thread.action.close-thread": {
|
||||
"message": "Uzavřít vlákno"
|
||||
},
|
||||
@@ -491,6 +575,12 @@
|
||||
"conversation-thread.action.reply-to-thread": {
|
||||
"message": "Odpovědět vláknu"
|
||||
},
|
||||
"conversation-thread.action.resubmit-for-review": {
|
||||
"message": "Znovu odeslat ke kontrole"
|
||||
},
|
||||
"conversation-thread.action.resubmit-for-review-with-reply": {
|
||||
"message": "Znovu odeslat ke kontrole s odpovědí "
|
||||
},
|
||||
"conversation-thread.action.send": {
|
||||
"message": "Odeslat"
|
||||
},
|
||||
@@ -500,6 +590,12 @@
|
||||
"conversation-thread.action.send-to-review-with-reply": {
|
||||
"message": "Odeslat ke kontrole s odpovědí"
|
||||
},
|
||||
"conversation-thread.action.withhold": {
|
||||
"message": "Pozastavit "
|
||||
},
|
||||
"conversation-thread.action.withhold-with-reply": {
|
||||
"message": "Pozastavit s odpovědí"
|
||||
},
|
||||
"conversation-thread.reply-editor.placeholder.reply": {
|
||||
"message": "Odpovědět vláknu..."
|
||||
},
|
||||
@@ -512,6 +608,9 @@
|
||||
"create-project-version.create-modal.stage.add-files.admonition": {
|
||||
"message": "Doplňkové soubory slouží jako podpůrné materiály (např. zdrojový kód), ne jako alternativní verze či varianty."
|
||||
},
|
||||
"create.collection.collection-info": {
|
||||
"message": "Tvá nová kolekce bude vytvořena jako veřejná a bude obsahovat {count, plural, =0 {žádné projekty} one {# projekt} few {# projekty} other {# projektů}}."
|
||||
},
|
||||
"create.collection.create-collection": {
|
||||
"message": "Vytvořit kolekci"
|
||||
},
|
||||
@@ -686,6 +785,9 @@
|
||||
"dashboard.collections.sort.recently-updated": {
|
||||
"message": "Nedávno aktualizováno"
|
||||
},
|
||||
"dashboard.creator-tax-form-modal.confirmation.download-button": {
|
||||
"message": "Stáhnout {formType}"
|
||||
},
|
||||
"dashboard.creator-tax-form-modal.confirmation.title": {
|
||||
"message": "Hotovo! 🎉"
|
||||
},
|
||||
@@ -720,7 +822,7 @@
|
||||
"message": "Vyhladaj štát..."
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.method-selection.region": {
|
||||
"message": "Región"
|
||||
"message": "Oblast"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.muralpay-details.account-owner": {
|
||||
"message": "Majitel účtu"
|
||||
@@ -740,6 +842,9 @@
|
||||
"dashboard.creator-withdraw-modal.muralpay-details.document-number-tax-id-placeholder": {
|
||||
"message": "Zadejte DIČ"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.muralpay-details.network": {
|
||||
"message": "Síť"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.paypal-details.account": {
|
||||
"message": "Účet"
|
||||
},
|
||||
@@ -759,7 +864,7 @@
|
||||
"message": "Přihlásit přes PayPal"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.stage.tax-form": {
|
||||
"message": ""
|
||||
"message": "Daňový formulář"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.tremendous-details.enter-denomination-placeholder": {
|
||||
"message": "Zadejte množství"
|
||||
@@ -782,6 +887,9 @@
|
||||
"dashboard.creator-withdraw-modal.withdraw-limit-used": {
|
||||
"message": "Vyčerpali jste svůj limit pro výběr <b>{withdrawLimit}</b>. Pro vyšší výběr musíte vyplnit daňový formulář."
|
||||
},
|
||||
"dashboard.discord-roles.role.creator": {
|
||||
"message": "Tvůrce"
|
||||
},
|
||||
"dashboard.organizations.button.create": {
|
||||
"message": "Vytvořit organizaci"
|
||||
},
|
||||
@@ -791,12 +899,18 @@
|
||||
"dashboard.organizations.error.fetch": {
|
||||
"message": "Nepodařilo se načíst organizace"
|
||||
},
|
||||
"dashboard.organizations.title": {
|
||||
"message": "Organizace"
|
||||
},
|
||||
"dashboard.overview.notifications.button.mark-all-as-read": {
|
||||
"message": "Označit vše jako přečtené"
|
||||
},
|
||||
"dashboard.overview.notifications.button.view-history": {
|
||||
"message": "Ukázat historii"
|
||||
},
|
||||
"dashboard.overview.notifications.empty.no-unread": {
|
||||
"message": "Nemáš žádná nepřečtená oznámení."
|
||||
},
|
||||
"dashboard.overview.notifications.history.label": {
|
||||
"message": "Historie"
|
||||
},
|
||||
@@ -809,6 +923,9 @@
|
||||
"dashboard.projects.head-title": {
|
||||
"message": "Projekty"
|
||||
},
|
||||
"dashboard.projects.links.button.edit": {
|
||||
"message": "Upravit odkazy"
|
||||
},
|
||||
"dashboard.projects.links.discord-invite.label": {
|
||||
"message": "Discord pozvánka"
|
||||
},
|
||||
@@ -827,6 +944,9 @@
|
||||
"dashboard.projects.table.status": {
|
||||
"message": "Stav"
|
||||
},
|
||||
"dashboard.report.title": {
|
||||
"message": "Nahlásit {id}"
|
||||
},
|
||||
"dashboard.revenue.available-now": {
|
||||
"message": "K dispozici nyní"
|
||||
},
|
||||
@@ -1271,6 +1391,9 @@
|
||||
"profile.meta.description-with-bio": {
|
||||
"message": "{bio} - Stáhněte si projekty od {username} na Modrinthu"
|
||||
},
|
||||
"profile.stats.projects-followers": {
|
||||
"message": "{count, plural, one {<stat>{count}</stat> sledující projektu} few {<stat>{count}</stat> sledující projektu} other {<stat>{count}</stat> sledujících projektu}}"
|
||||
},
|
||||
"profile.user-id": {
|
||||
"message": "ID uživatele: {id}"
|
||||
},
|
||||
|
||||
@@ -134,18 +134,6 @@
|
||||
"analytics.chart.render-limit.header": {
|
||||
"message": "Alle {count} Linien im Diagramm anzeigen?"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "Zeige alle {itemType, select, project {{count, plural, one {Projekt} other {Projekte}}} country {{count, plural, one {Land} other {Länder}}} monetization {{count, plural, one {Monetarisierungswert} other {Monetarisierungswerte}}} downloadSource {{count, plural, one {Download-Quelle} other {Download-Quellen}}} downloadReason {{count, plural, one {Download-Grund} other {Download-Gründe}}} projectVersion {{count, plural, one {Projektversion} other {Projektversionen}}} loader {{count, plural, one {Loader} other {Loader}}} gameVersion {{count, plural, one {Spielversion} other {Spielversionen}}} other {{count, plural, one {Element} other {Elemente}}}} aus der Tabelle an"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "Zeige {count} {itemType, select, project {{count, plural, one {Projekt} other {Projekte}}} country {{count, plural, one {Land} other {Länder}}} monetization {{count, plural, one {Monetarisierungswert} other {Monetarisierungswerte}}} downloadSource {{count, plural, one {Download-Quelle} other {Download-Quellen}}} downloadReason {{count, plural, one {Download-Grund} other {Download-Gründe}}} projectVersion {{count, plural, one {Projektversion} other {Projektversionen}}} loader {{count, plural, one {Loader} other {Loader}}} gameVersion {{count, plural, one {Spielversion} other {Spielversionen}}} other {{count, plural, one {Element} other {Elemente}}}} aus der Tabelle an"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "Zeige {limit} {itemType, select, project {{limit, plural, one {Projekt} other {Projekte}}} country {{limit, plural, one {Land} other {Länder}}} monetization {{limit, plural, one {Monetarisierungswert} other {Monetarisierungswerte}}} downloadSource {{limit, plural, one {Download-Quelle} other {Download-Quellen}}} downloadReason {{limit, plural, one {Download-Grund} other {Download-Gründe}}} projectVersion {{limit, plural, one {Projektversion} other {Projektversionen}}} loader {{limit, plural, one {Loader} other {Loader}}} gameVersion {{limit, plural, one {Spielversion} other {Spielversionen}}} other {{limit, plural, one {Element} other {Elemente}}}} aus der Tabelle an"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "Zeige die Top {count} {itemType, select, project {{count, plural, one {Projekt} other {Projekte}}} country {{count, plural, one {Land} other {Länder}}} monetization {{count, plural, one {Monetarisierungswert} other {Monetarisierungswerte}}} downloadSource {{count, plural, one {Download-Quelle} other {Download-Quellen}}} downloadReason {{count, plural, one {Download-Grund} other {Download-Gründe}}} projectVersion {{count, plural, one {Projektversion} other {Projektversionen}}} loader {{count, plural, one {Loader} other {Loader}}} gameVersion {{count, plural, one {Spielversion} other {Spielversionen}}} other {{count, plural, one {Element} other {Elemente}}}} aus der Tabelle an"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# Tag} other {# Tage}}"
|
||||
},
|
||||
@@ -1467,19 +1455,19 @@
|
||||
"message": "Du hast dein Auszahlungslimit von <b>{withdrawLimit}</b> aufgebraucht. Du musst ein Steuerformular ausfüllen, um merh abzuheben."
|
||||
},
|
||||
"dashboard.discord-roles.banner.body": {
|
||||
"message": "Du bist für {roles} qualifiziert. Verknüpfe dein Discord-Konto über Modrinth, dann synchronisieren wir diese automatisch."
|
||||
"message": "Du bist berechtigt für {roles}. Verknüpfe dein Discord-Konto über Modrinth und wir synchronisieren sie automatisch."
|
||||
},
|
||||
"dashboard.discord-roles.banner.cta": {
|
||||
"message": "Discord verbinden"
|
||||
"message": "Discord verknüpfen"
|
||||
},
|
||||
"dashboard.discord-roles.banner.title": {
|
||||
"message": "Hol dir deine Discord-Rollen"
|
||||
"message": "Beanspruche deine Discord-Rollen"
|
||||
},
|
||||
"dashboard.discord-roles.role.big-creator": {
|
||||
"message": "1M+ Downloads"
|
||||
"message": "1 Mio.+ Downloads"
|
||||
},
|
||||
"dashboard.discord-roles.role.creator": {
|
||||
"message": "Ersteller"
|
||||
"message": "Creator"
|
||||
},
|
||||
"dashboard.discord-roles.role.pride": {
|
||||
"message": "Pride 2026"
|
||||
@@ -2316,7 +2304,7 @@
|
||||
"message": "Entdecke, Spiele und teile Minecraft-Inhalte durch unsere quelloffene Platform, welche für die Community entwickelt wird."
|
||||
},
|
||||
"layout.action.analytics-events": {
|
||||
"message": "Analytics-Events"
|
||||
"message": "Analytics-Ergebnisse"
|
||||
},
|
||||
"layout.action.change-theme": {
|
||||
"message": "Farbschema ändern"
|
||||
@@ -2874,7 +2862,7 @@
|
||||
"message": "Ein Modrinth Benutzer."
|
||||
},
|
||||
"profile.button.analytics": {
|
||||
"message": "Benutzeranalysen anzeigen"
|
||||
"message": "Nutzungsstatistik anzeigen"
|
||||
},
|
||||
"profile.button.billing": {
|
||||
"message": "Nutzer Zahlungen verwalten"
|
||||
@@ -3302,9 +3290,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "Wenn du Hilfe benötigst oder weitere Fragen hast, besuche bitte das <help-center-link>Hilfezentrum von Modrinth</help-center-link> und klicke auf die blaue Sprechblase, um den Support zu kontaktieren."
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "Benutzer-UI anzeigen"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "Dies ist ein privater Unterhaltungsthread mit den Modrinth-Moderatoren. Sie können dich bei Problemen bezüglich dieses Projekts kontaktieren."
|
||||
},
|
||||
@@ -3434,9 +3419,6 @@
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, one {Diese Version ist} other {Diese Versionen sind}} derzeit zurückgehalten und nicht öffentlich gelistet. Bitte stelle einen Nachweis bereit, dass du die Erlaubnis hast, bestimmte Dateien weiterzuverbreiten, die in {count, plural, one {der Modpack-Version} other {den Modpack-Versionen}} enthalten sind."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "Beheben"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, one {Version {version_name}} other {Versionen}} zurückgehalten aufgrund von unbekannten eingebetteten Inhalten"
|
||||
},
|
||||
|
||||
@@ -134,18 +134,6 @@
|
||||
"analytics.chart.render-limit.header": {
|
||||
"message": "Alle {count} Zeilen im Graphen anzeigen?"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "Zeige alle {itemType, select, project {{count, plural, one {Projekt} other {Projekte}}} country {{count, plural, one {Land} other {Länder}}} monetization {{count, plural, one {Monetarisierungswert} other {Monetarisierungswerte}}} downloadSource {{count, plural, one {Downloadquelle} other {Downloadquellen}}} downloadReason {{count, plural, one {Downloadgrund} other {Downloadgründe}}} projectVersion {{count, plural, one {Projektversion} other {Projektversionen}}} loader {{count, plural, one {Loader} other {Loader}}} gameVersion {{count, plural, one {Spielversion} other {Spielversionen}}} other {{count, plural, one {Artikel} other {Artikel}}}} aus der Tabelle"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "Zeige {count} {itemType, select, project {{count, plural, one {Projekt} other {Projekte}}} country {{count, plural, one {Land} other {Länder}}} monetization {{count, plural, one {Monetarisierungswert} other {Monetarisierungswerte}}} downloadSource {{count, plural, one {Downloadquelle} other {Downloadquellen}}} downloadReason {{count, plural, one {Downloadgrund} other {Downloadgründe}}} projectVersion {{count, plural, one {Projektversion} other {Projektversionen}}} loader {{count, plural, one {Loader} other {Loader}}} gameVersion {{count, plural, one {Spielversion} other {Spielversionen}}} other {{count, plural, one {Artikel} other {Artikel}}}} aus der Tabelle"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "Zeige {limit} {itemType, select, project {{limit, plural, one {Projekt} other {Projekte}}} country {{limit, plural, one {Land} other {Länder}}} monetization {{limit, plural, one {Monetarisierungswert} other {Monetarisierungswerte}}} downloadSource {{limit, plural, one {Downloadquelle} other {Downloadquellen}}} downloadReason {{limit, plural, one {Downloadgrund} other {Downloadgründe}}} projectVersion {{limit, plural, one {Projektversion} other {Projektversionen}}} loader {{limit, plural, one {Loader} other {Loader}}} gameVersion {{limit, plural, one {Spielversion} other {Spielversionen}}} other {{limit, plural, one {Artikel} other {Artikel}}}} aus der Tabelle"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "Zeige die top {count} {itemType, select, project {{count, plural, one {Projekt} other {Projekte}}} country {{count, plural, one {Land} other {Länder}}} monetization {{count, plural, one {Monetarisierungswert} other {Monetarisierungswerte}}} downloadSource {{count, plural, one {Downloadquelle} other {Downloadquellen}}} downloadReason {{count, plural, one {Downloadgrund} other {Downloadgründe}}} projectVersion {{count, plural, one {Projektversion} other {Projektversionen}}} loader {{count, plural, one {Loader} other {Loader}}} gameVersion {{count, plural, one {Spielversion} other {Spielversionen}}} other {{count, plural, one {Artikel} other {Artikel}}}} aus der Tabelle"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# Tag} other {# Tage}}"
|
||||
},
|
||||
@@ -3302,9 +3290,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "Falls du Hilfe benötigst oder weitere Fragen hast, besuche bitte das <help-center-link>Hilfezentrum von Modrinth</help-center-link> und klicke auf die blaue Sprechblase, um den Support zu kontaktieren."
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "Mitglieder-UI anzeigen"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "Dies ist eine private Konversation mit den Moderatoren von Modrinth. Diese können dir Nachrichten zu Problemen bezüglich dieses Projekts senden."
|
||||
},
|
||||
@@ -3434,9 +3419,6 @@
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, one {Diese Version ist} other {Diese Versionen sind}} derzeit zurückgehalten und nicht öffentlich gelistet. Bitte stelle einen Nachweis bereit, dass du die Erlaubnis hast, bestimmte Dateien weiterzuverbreiten, die im Modpack in {count, plural, one {Version} other {Versionen}} enthalten sind."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "Beheben"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, one {Version {version_name} wurde} other {Versionen wurden}} aufgrund unbekannter eingebetteter Inhalte zurückgehalten"
|
||||
},
|
||||
|
||||
@@ -23,6 +23,15 @@
|
||||
"analytics.breakdown.country": {
|
||||
"message": "Country"
|
||||
},
|
||||
"analytics.breakdown.dependent-on": {
|
||||
"message": "Dependent on"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-download": {
|
||||
"message": "Dependent project"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-type": {
|
||||
"message": "Dependent project type"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "Download reason"
|
||||
},
|
||||
@@ -38,6 +47,9 @@
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "Loader"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "Member"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "Monetization"
|
||||
},
|
||||
@@ -135,16 +147,22 @@
|
||||
"message": "Show all {count} lines in graph?"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "Showing all {itemType, select, project {{count, plural, one {project} other {projects}}} country {{count, plural, one {country} other {countries}}} monetization {{count, plural, one {monetization value} other {monetization values}}} downloadSource {{count, plural, one {download source} other {download sources}}} downloadReason {{count, plural, one {download reason} other {download reasons}}} projectVersion {{count, plural, one {project version} other {project versions}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {game version} other {game versions}}} other {{count, plural, one {item} other {items}}}} from table"
|
||||
"message": "Showing all {itemType, select, project {{count, plural, one {project} other {projects}}} country {{count, plural, one {country} other {countries}}} monetization {{count, plural, one {monetization value} other {monetization values}}} downloadSource {{count, plural, one {download source} other {download sources}}} downloadReason {{count, plural, one {download reason} other {download reasons}}} member {{count, plural, one {member} other {members}}} projectVersion {{count, plural, one {project version} other {project versions}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {game version} other {game versions}}} other {{count, plural, one {item} other {items}}}} from table"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "Showing {count} {itemType, select, project {{count, plural, one {project} other {projects}}} country {{count, plural, one {country} other {countries}}} monetization {{count, plural, one {monetization value} other {monetization values}}} downloadSource {{count, plural, one {download source} other {download sources}}} downloadReason {{count, plural, one {download reason} other {download reasons}}} projectVersion {{count, plural, one {project version} other {project versions}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {game version} other {game versions}}} other {{count, plural, one {item} other {items}}}} from table"
|
||||
"message": "Showing {count} {itemType, select, project {{count, plural, one {project} other {projects}}} country {{count, plural, one {country} other {countries}}} monetization {{count, plural, one {monetization value} other {monetization values}}} downloadSource {{count, plural, one {download source} other {download sources}}} downloadReason {{count, plural, one {download reason} other {download reasons}}} member {{count, plural, one {member} other {members}}} projectVersion {{count, plural, one {project version} other {project versions}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {game version} other {game versions}}} other {{count, plural, one {item} other {items}}}} from table"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "Showing {limit} {itemType, select, project {{limit, plural, one {project} other {projects}}} country {{limit, plural, one {country} other {countries}}} monetization {{limit, plural, one {monetization value} other {monetization values}}} downloadSource {{limit, plural, one {download source} other {download sources}}} downloadReason {{limit, plural, one {download reason} other {download reasons}}} projectVersion {{limit, plural, one {project version} other {project versions}}} loader {{limit, plural, one {loader} other {loaders}}} gameVersion {{limit, plural, one {game version} other {game versions}}} other {{limit, plural, one {item} other {items}}}} from table"
|
||||
"message": "Showing {limit} {itemType, select, project {{limit, plural, one {project} other {projects}}} country {{limit, plural, one {country} other {countries}}} monetization {{limit, plural, one {monetization value} other {monetization values}}} downloadSource {{limit, plural, one {download source} other {download sources}}} downloadReason {{limit, plural, one {download reason} other {download reasons}}} member {{limit, plural, one {member} other {members}}} projectVersion {{limit, plural, one {project version} other {project versions}}} loader {{limit, plural, one {loader} other {loaders}}} gameVersion {{limit, plural, one {game version} other {game versions}}} other {{limit, plural, one {item} other {items}}}} from table"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "Showing top {count} {itemType, select, project {{count, plural, one {project} other {projects}}} country {{count, plural, one {country} other {countries}}} monetization {{count, plural, one {monetization value} other {monetization values}}} downloadSource {{count, plural, one {download source} other {download sources}}} downloadReason {{count, plural, one {download reason} other {download reasons}}} projectVersion {{count, plural, one {project version} other {project versions}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {game version} other {game versions}}} other {{count, plural, one {item} other {items}}}} from table"
|
||||
"message": "Showing top {count} {itemType, select, project {{count, plural, one {project} other {projects}}} country {{count, plural, one {country} other {countries}}} monetization {{count, plural, one {monetization value} other {monetization values}}} downloadSource {{count, plural, one {download source} other {download sources}}} downloadReason {{count, plural, one {download reason} other {download reasons}}} member {{count, plural, one {member} other {members}}} projectVersion {{count, plural, one {project version} other {project versions}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {game version} other {game versions}}} other {{count, plural, one {item} other {items}}}} from table"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-on-project": {
|
||||
"message": "Dependent on {project}"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-project-version": {
|
||||
"message": "{dependentProject} dependent on {dependencyProject}, {version}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# day} other {# days}}"
|
||||
@@ -230,9 +248,15 @@
|
||||
"analytics.filter.search.countries": {
|
||||
"message": "Search countries..."
|
||||
},
|
||||
"analytics.filter.search.dependent-projects": {
|
||||
"message": "Search projects..."
|
||||
},
|
||||
"analytics.filter.search.download-sources": {
|
||||
"message": "Search download sources..."
|
||||
},
|
||||
"analytics.filter.search.members": {
|
||||
"message": "Search members..."
|
||||
},
|
||||
"analytics.filter.search.project-versions": {
|
||||
"message": "Search project versions..."
|
||||
},
|
||||
@@ -479,6 +503,12 @@
|
||||
"analytics.value.monetized": {
|
||||
"message": "Monetized"
|
||||
},
|
||||
"analytics.value.no-dependent": {
|
||||
"message": "None"
|
||||
},
|
||||
"analytics.value.no-dependent-tooltip": {
|
||||
"message": "Downloaded for reasons other than being a dependency"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "None"
|
||||
},
|
||||
@@ -3302,9 +3332,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "If you need assistance or have additional inquiries, please visit the <help-center-link>Modrinth Help Center</help-center-link> and click the blue bubble to contact support."
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "Show member UI"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "This is a private conversation thread with the Modrinth moderators. They may message you with issues concerning this project."
|
||||
},
|
||||
@@ -3375,43 +3402,76 @@
|
||||
"message": "URL"
|
||||
},
|
||||
"project.settings.permissions.attention-needed.description.proj-approved": {
|
||||
"message": "Please provide proof that you have permission to redistribute all of the following files and any withheld versions will be automatically published."
|
||||
"message": "Please provide proof that you have permission to redistribute all of the following files. Once completed, withheld versions will be automatically published."
|
||||
},
|
||||
"project.settings.permissions.attention-needed.description.proj-draft": {
|
||||
"message": "Please provide proof that you have permission to redistribute all of the following files before you can submit your project for review."
|
||||
"message": "Please provide proof that you have permission to redistribute all of the following files before submitting your project for review."
|
||||
},
|
||||
"project.settings.permissions.attention-needed.title": {
|
||||
"message": "Unknown embedded content"
|
||||
"message": "Unknown external content"
|
||||
},
|
||||
"project.settings.permissions.bad-proof.description": {
|
||||
"message": "Modrinth's moderation team has rejected the permission information you provided for some external content. Please review the rejected items below and provide acceptable proof or remove the content."
|
||||
},
|
||||
"project.settings.permissions.bad-proof.title": {
|
||||
"message": "Some proofs were rejected"
|
||||
},
|
||||
"project.settings.permissions.collapse-all": {
|
||||
"message": "Collapse all"
|
||||
},
|
||||
"project.settings.permissions.completed.description": {
|
||||
"message": "All external content has attributions provided."
|
||||
"message": "All external content has permission information and attributions have been provided."
|
||||
},
|
||||
"project.settings.permissions.completed.title": {
|
||||
"message": "Attributions completed!"
|
||||
"message": "Permissions completed!"
|
||||
},
|
||||
"project.settings.permissions.empty-state.description": {
|
||||
"message": "None of your versions contain external content, so you don't need to worry about obtaining permissions."
|
||||
"message": "None of your project's versions contain external content, so you don't need to worry about obtaining permissions."
|
||||
},
|
||||
"project.settings.permissions.empty-state.heading": {
|
||||
"message": "You're all set!"
|
||||
},
|
||||
"project.settings.permissions.expand-all": {
|
||||
"message": "Expand all"
|
||||
},
|
||||
"project.settings.permissions.fail.description": {
|
||||
"message": "You don't have permission to redistribute some of the external content you've added. In order to publish on Modrinth, remove the infringing content."
|
||||
"message": "You may not have permission to redistribute some of the external content in your project. In order to publish on Modrinth, please remove this content or provide proof that you do have permission to use it."
|
||||
},
|
||||
"project.settings.permissions.fail.title": {
|
||||
"message": "Some content can't be included"
|
||||
},
|
||||
"project.settings.permissions.info-banner.description": {
|
||||
"message": "If you include content that isn’t hosted on Modrinth, you need to let us know where it’s from and verify that you have permission to distribute the files. Check out <link>our guide</link> to learn about how to do this properly!"
|
||||
"message": "If you include content that isn’t hosted on Modrinth, you need to let us know where it’s from and verify that you have permission to distribute the files. Check out <link>our announcement of this new system</link> to learn more!"
|
||||
},
|
||||
"project.settings.permissions.info-banner.title": {
|
||||
"message": "Learn how attributions work"
|
||||
"message": "Learn about distribution permissions"
|
||||
},
|
||||
"project.settings.permissions.learn-more": {
|
||||
"message": "Learn more"
|
||||
},
|
||||
"project.settings.permissions.no-results": {
|
||||
"message": "No external files match your search."
|
||||
},
|
||||
"project.settings.permissions.not-allowed.description": {
|
||||
"message": "Some of the external content included cannot be distributed on Modrinth because it violates our Content Rules and must be removed."
|
||||
},
|
||||
"project.settings.permissions.pending-approval-count": {
|
||||
"message": "{count, plural, =0 {No attributions need approval} one {# attribution needs approval} other {# attributions need approval}}"
|
||||
},
|
||||
"project.settings.permissions.search-placeholder": {
|
||||
"message": "Search {count} {count, plural, one {external project} other {external projects}}..."
|
||||
"message": "Search {count} {count, plural, one {project} other {projects}}..."
|
||||
},
|
||||
"project.settings.permissions.sort.most-files": {
|
||||
"message": "Most files"
|
||||
},
|
||||
"project.settings.permissions.sort.recently-edited": {
|
||||
"message": "Recently edited"
|
||||
},
|
||||
"project.settings.permissions.sort.rejected": {
|
||||
"message": "Rejected"
|
||||
},
|
||||
"project.settings.permissions.sort.status": {
|
||||
"message": "Status"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Settings"
|
||||
@@ -3434,9 +3494,6 @@
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, one {This version is} other {These versions are}} currently withheld and not publicly listed. Please provide proof that you have permission to redistribute certain files included in the modpack {count, plural, one {version} other {versions}}."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "Resolve"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, one {Version {version_name}} other {Versions}} withheld due to unknown embedded content"
|
||||
},
|
||||
@@ -4586,6 +4643,48 @@
|
||||
"ui.newsletter-button.tooltip": {
|
||||
"message": "Subscribe to the Modrinth newsletter"
|
||||
},
|
||||
"version.all-versions": {
|
||||
"message": "All versions"
|
||||
},
|
||||
"version.confirm-delete.description": {
|
||||
"message": "This version will be permanently deleted. This action cannot be undone."
|
||||
},
|
||||
"version.confirm-delete.proceed": {
|
||||
"message": "Delete version"
|
||||
},
|
||||
"version.confirm-delete.title": {
|
||||
"message": "Are you sure you want to delete this version?"
|
||||
},
|
||||
"version.dependency.view-project": {
|
||||
"message": "View project"
|
||||
},
|
||||
"version.dependency.view-version": {
|
||||
"message": "View version"
|
||||
},
|
||||
"version.download.download-dependency": {
|
||||
"message": "Download dependency"
|
||||
},
|
||||
"version.download.no-primary-file": {
|
||||
"message": "Error: No primary file found"
|
||||
},
|
||||
"version.download.optional-resource-pack": {
|
||||
"message": "Optional resource pack"
|
||||
},
|
||||
"version.download.required-resource-pack": {
|
||||
"message": "Required resource pack"
|
||||
},
|
||||
"version.edit.button": {
|
||||
"message": "Edit"
|
||||
},
|
||||
"version.edit.details": {
|
||||
"message": "Edit details"
|
||||
},
|
||||
"version.edit.files": {
|
||||
"message": "Edit files"
|
||||
},
|
||||
"version.edit.metadata": {
|
||||
"message": "Edit metadata"
|
||||
},
|
||||
"version.environment.none.description": {
|
||||
"message": "The environment for this version has not been specified."
|
||||
},
|
||||
@@ -4597,5 +4696,56 @@
|
||||
},
|
||||
"version.environment.unknown.title": {
|
||||
"message": "Unknown environment"
|
||||
},
|
||||
"version.package-as-mod.button": {
|
||||
"message": "Package as mod"
|
||||
},
|
||||
"version.package-as-mod.description": {
|
||||
"message": "This will create a new version with support for the selected mod loaders. You will be redirected to the new version and can edit it to your liking."
|
||||
},
|
||||
"version.package-as-mod.header": {
|
||||
"message": "Packaging data pack as a mod"
|
||||
},
|
||||
"version.package-as-mod.mod-loaders": {
|
||||
"message": "Mod loaders"
|
||||
},
|
||||
"version.package-as-mod.mod-loaders.description": {
|
||||
"message": "The mod loaders you would like to package your data pack for."
|
||||
},
|
||||
"version.package-as-mod.mod-loaders.placeholder": {
|
||||
"message": "Choose mod loaders..."
|
||||
},
|
||||
"version.package-as-mod.submit-button": {
|
||||
"message": "Package data pack"
|
||||
},
|
||||
"version.section.content.dev-info": {
|
||||
"message": "Developer information"
|
||||
},
|
||||
"version.section.content.dev-info.gradle-snippet": {
|
||||
"message": "build.gradle:"
|
||||
},
|
||||
"version.section.content.dev-info.maven-coordinates": {
|
||||
"message": "Maven coordinates:"
|
||||
},
|
||||
"version.section.content.dev-info.maven-description": {
|
||||
"message": "Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as <gradle-link>Gradle</gradle-link>. To learn more about the Modrinth Maven API, <article-link>click here</article-link>."
|
||||
},
|
||||
"version.section.content.dev-info.maven-note": {
|
||||
"message": "Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API."
|
||||
},
|
||||
"version.section.content.dev-info.version-id": {
|
||||
"message": "Version ID:"
|
||||
},
|
||||
"version.supplementary-resources.copy-hash-sha1": {
|
||||
"message": "Copy SHA-1"
|
||||
},
|
||||
"version.supplementary-resources.copy-hash-sha512": {
|
||||
"message": "Copy SHA-512"
|
||||
},
|
||||
"version.unknown-embedded-content.description": {
|
||||
"message": "This version is currently withheld and not publicly listed. Please provide proof that you have permission to redistribute certain files included."
|
||||
},
|
||||
"version.unknown-embedded-content.title": {
|
||||
"message": "Withheld due to unknown embedded content"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,15 @@
|
||||
"analytics.breakdown.country": {
|
||||
"message": "País"
|
||||
},
|
||||
"analytics.breakdown.dependent-on": {
|
||||
"message": "Dependiente de"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-download": {
|
||||
"message": "Proyecto dependiente"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-type": {
|
||||
"message": "Tipo de proyecto dependiente"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "Razón de descarga"
|
||||
},
|
||||
@@ -38,6 +47,9 @@
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "Loader"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "Miembro"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "Monetización"
|
||||
},
|
||||
@@ -135,13 +147,22 @@
|
||||
"message": "¿Mostrar todas las {count} líneas en el gráfico?"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "Mostrando {itemType, select, project {{count, plural, one {el proyecto} other {todos los # proyectos}}} country {{count, plural, one {el país} other {todos los # países}}} monetization {{count, plural, one {el valor de monetización} other {todos los valores de monetización}}} downloadSource {{count, plural, one {la fuente de descarga} other {todas las # fuentes de descarga}}} downloadReason {{count, plural, one {la razón de descarga} other {todas las # razones de descarga}}} projectVersion {{count, plural, one {la versión del proyecto} other {todas las # versiones del proyecto}}} loader {{count, plural, one {el loader} other {todos los # loaders}}} gameVersion {{count, plural, one {la versión del juego} other {todas las # versiones del juego}}} other {{count, plural, one {el ítem} other {todos los # ítems}}}} de la tabla"
|
||||
"message": "Mostrando {itemType, select, project {{count, plural, one {el proyecto} other {todos los proyectos}}} country {{count, plural, one {el país} other {todos los países}}} monetization {{count, plural, one {el valor de monetización} other {todos los valores de monetización}}} downloadSource {{count, plural, one {la fuente de descarga} other {todas las fuentes de descarga}}} downloadReason {{count, plural, one {el motivo de descarga} other {todos los motivos de descarga}}} member {{count, plural, one {el miembro} other {todos los miembros}}} projectVersion {{count, plural, one {la versión del proyecto} other {todas las versiones del proyecto}}} loader {{count, plural, one {el cargador} other {todos los cargadores}}} gameVersion {{count, plural, one {la versión del juego} other {todas las versiones del juego}}} other {{count, plural, one {el elemento} other {todos los elementos}}}} de la tabla"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "Mostrando {count} {itemType, select, project {{count, plural, one {proyecto} other {proyectos}}} country {{count, plural, one {país} other {países}}} monetization {{count, plural, one {valor de monetización} other {valores de monetización}}} downloadSource {{count, plural, one {fuente de descarga} other {fuentes de descarga}}} downloadReason {{count, plural, one {motivo de descarga} other {motivos de descarga}}} member {{count, plural, one {miembro} other {miembros}}} projectVersion {{count, plural, one {versión del proyecto} other {versiones del proyecto}}} loader {{count, plural, one {cargador} other {cargadores}}} gameVersion {{count, plural, one {versión del juego} other {versiones del juego}}} other {{count, plural, one {elemento} other {elementos}}}} de la tabla"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "Mostrando {limit} {itemType, select, project {{limit, plural, one {proyecto} other {proyectos}}} country {{limit, plural, one {país} other {países}}} monetization {{limit, plural, one {valor de monetización} other {valores de monetización}}} downloadSource {{limit, plural, one {fuente de descarga} other {fuentes de descarga}}} downloadReason {{limit, plural, one {razón de descarga} other {razones de descarga}}} projectVersion {{limit, plural, one {versión del proyecto} other {versiones del proyecto}}} loader {{limit, plural, one {loader} other {loaders}}} gameVersion {{limit, plural, one {version de juego} other {versiones de juego}}} other {{limit, plural, one {ítem} other {ítems}}}} de la tabla"
|
||||
"message": "Mostrando {limit} {itemType, select, project {{limit, plural, one {proyecto} other {proyectos}}} country {{limit, plural, one {país} other {países}}} monetization {{limit, plural, one {valor de monetización} other {valores de monetización}}} downloadSource {{limit, plural, one {fuente de descarga} other {fuentes de descarga}}} downloadReason {{limit, plural, one {motivo de descarga} other {motivos de descarga}}} member {{limit, plural, one {miembro} other {miembros}}} projectVersion {{limit, plural, one {versión del proyecto} other {versiones del proyecto}}} loader {{limit, plural, one {cargador} other {cargadores}}} gameVersion {{limit, plural, one {versión del juego} other {versiones del juego}}} other {{limit, plural, one {elemento} other {elementos}}}} de la tabla"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "Mostrando el top {count} {itemType, select, project {{count, plural, one {del proyecto} other {de todos los # proyectos}}} country {{count, plural, one {del país} other {de todos los # países}}} monetization {{count, plural, one {del valor de monetización} other {de todos los valores de monetización}}} downloadSource {{count, plural, one {de la fuente de descarga} other {de todas las # fuentes de descarga}}} downloadReason {{count, plural, one {de la razón de descarga} other {de todas las # razones de descarga}}} projectVersion {{count, plural, one {de la versión del proyecto} other {de todas las # versiones del proyecto}}} loader {{count, plural, one {del loader} other {de todos los # loaders}}} gameVersion {{count, plural, one {de la versión del juego} other {de todas las # versiones del juego}}} other {{count, plural, one {del ítem} other {de todos los # ítems}}}} de la tabla"
|
||||
"message": "Mostrando el top {count} de {itemType, select, project {{count, plural, one {proyecto} other {proyectos}}} country {{count, plural, one {país} other {países}}} monetization {{count, plural, one {valor de monetización} other {valores de monetización}}} downloadSource {{count, plural, one {fuente de descarga} other {fuentes de descarga}}} downloadReason {{count, plural, one {motivo de descarga} other {motivos de descarga}}} member {{count, plural, one {miembro} other {miembros}}} projectVersion {{count, plural, one {versión del proyecto} other {versiones del proyecto}}} loader {{count, plural, one {cargador} other {cargadores}}} gameVersion {{count, plural, one {versión del juego} other {versiones del juego}}} other {{count, plural, one {elemento} other {elementos}}}} de la tabla"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-on-project": {
|
||||
"message": "Dependiente de {project}"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-project-version": {
|
||||
"message": "{dependentProject} depende de la {version} de {dependencyProject}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# día} other {# días}}"
|
||||
@@ -227,9 +248,15 @@
|
||||
"analytics.filter.search.countries": {
|
||||
"message": "Buscar países..."
|
||||
},
|
||||
"analytics.filter.search.dependent-projects": {
|
||||
"message": "Buscar proyectos..."
|
||||
},
|
||||
"analytics.filter.search.download-sources": {
|
||||
"message": "Buscar fuentes de descarga..."
|
||||
},
|
||||
"analytics.filter.search.members": {
|
||||
"message": "Buscar miembros..."
|
||||
},
|
||||
"analytics.filter.search.project-versions": {
|
||||
"message": "Buscar versiones del proyecto..."
|
||||
},
|
||||
@@ -476,6 +503,12 @@
|
||||
"analytics.value.monetized": {
|
||||
"message": "Monetizado"
|
||||
},
|
||||
"analytics.value.no-dependent": {
|
||||
"message": "Nada"
|
||||
},
|
||||
"analytics.value.no-dependent-tooltip": {
|
||||
"message": "Descargado por razones distintas a ser una dependencia"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "Nada"
|
||||
},
|
||||
@@ -3299,9 +3332,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "Si necesitas ayuda o tienes consultas adicionales, por favor visita el <help-center-link>Centro de ayuda de Modrinth</help-center-link> y haz click en la burbuja azúl para contactar con soporte."
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "Mostrar interfaz de miembros"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "Este es un hilo de conversación con los moderadores de Modrinth. Es posible que te envíen mensajes sobre cuestiones relacionadas con este proyecto."
|
||||
},
|
||||
@@ -3431,9 +3461,6 @@
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, one {Esta versión está retenida y no listada} other {Estas versiones están retenidas y no listadas}} públicamente. Por favor, proporciona pruebas de que tienes permiso para redistribuir algunos de los archivos incluidos en {count, plural, one {la versión} other {las versiones}} del modpack."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "Resolver"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, one {Versión {version_name} retenida} other {Versiones retenidas}} debido a que incluye contenido desconocido"
|
||||
},
|
||||
|
||||
@@ -23,6 +23,15 @@
|
||||
"analytics.breakdown.country": {
|
||||
"message": "País"
|
||||
},
|
||||
"analytics.breakdown.dependent-on": {
|
||||
"message": "Depende de"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-download": {
|
||||
"message": "Proyecto dependiente"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-type": {
|
||||
"message": "Tipo de proyecto dependiente"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "Descargar razón"
|
||||
},
|
||||
@@ -38,6 +47,9 @@
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "Loader"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "Miembro"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "Monetización"
|
||||
},
|
||||
@@ -135,13 +147,22 @@
|
||||
"message": "¿Mostrar todas las {count} líneas en el gráfico?"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "Mostrando {itemType, select, project {{count, plural, one {el proyecto} other {todos los # proyectos}}} country {{count, plural, one {el país} other {todos los # países}}} monetization {{count, plural, one {el valor de monetización} other {todos los valores de monetización}}} downloadSource {{count, plural, one {la fuente de descarga} other {todas las # fuentes de descarga}}} downloadReason {{count, plural, one {la razón de descarga} other {todas las # razones de descarga}}} projectVersion {{count, plural, one {la versión del proyecto} other {todas las # versiones del proyecto}}} loader {{count, plural, one {el loader} other {todos los # loaders}}} gameVersion {{count, plural, one {la versión del juego} other {todas las # versiones del juego}}} other {{count, plural, one {el ítem} other {todos los # ítems}}}} de la tabla"
|
||||
"message": "Mostrando {itemType, select, project {{count, plural, one {el proyecto} other {todos los proyectos}}} country {{count, plural, one {el país} other {todos los países}}} monetization {{count, plural, one {el valor de monetización} other {todos los valores de monetización}}} downloadSource {{count, plural, one {la fuente de descarga} other {todas las fuentes de descarga}}} downloadReason {{count, plural, one {el motivo de descarga} other {todos los motivos de descarga}}} member {{count, plural, one {el miembro} other {todos los miembros}}} projectVersion {{count, plural, one {la versión del proyecto} other {todas las versiones del proyecto}}} loader {{count, plural, one {el cargador} other {todos los cargadores}}} gameVersion {{count, plural, one {la versión del juego} other {todas las versiones del juego}}} other {{count, plural, one {el elemento} other {todos los elementos}}}} de la tabla"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "Mostrando {count} {itemType, select, project {{count, plural, one {proyecto} other {proyectos}}} country {{count, plural, one {país} other {países}}} monetization {{count, plural, one {valor de monetización} other {valores de monetización}}} downloadSource {{count, plural, one {fuente de descarga} other {fuentes de descarga}}} downloadReason {{count, plural, one {motivo de descarga} other {motivos de descarga}}} member {{count, plural, one {miembro} other {miembros}}} projectVersion {{count, plural, one {versión del proyecto} other {versiones del proyecto}}} loader {{count, plural, one {cargador} other {cargadores}}} gameVersion {{count, plural, one {versión del juego} other {versiones del juego}}} other {{count, plural, one {elemento} other {elementos}}}} de la tabla"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "Mostrando {limit} {itemType, select, project {{limit, plural, one {proyecto} other {proyectos}}} country {{limit, plural, one {país} other {países}}} monetization {{limit, plural, one {valor de monetización} other {valores de monetización}}} downloadSource {{limit, plural, one {fuente de descarga} other {fuentes de descarga}}} downloadReason {{limit, plural, one {razón de descarga} other {razones de descarga}}} projectVersion {{limit, plural, one {versión del proyecto} other {versiones del proyecto}}} loader {{limit, plural, one {loader} other {loaders}}} gameVersion {{limit, plural, one {version de juego} other {versiones de juego}}} other {{limit, plural, one {ítem} other {ítems}}}} de la tabla"
|
||||
"message": "Mostrando {limit} {itemType, select, project {{limit, plural, one {proyecto} other {proyectos}}} country {{limit, plural, one {país} other {países}}} monetization {{limit, plural, one {valor de monetización} other {valores de monetización}}} downloadSource {{limit, plural, one {fuente de descarga} other {fuentes de descarga}}} downloadReason {{limit, plural, one {motivo de descarga} other {motivos de descarga}}} member {{limit, plural, one {miembro} other {miembros}}} projectVersion {{limit, plural, one {versión del proyecto} other {versiones del proyecto}}} loader {{limit, plural, one {cargador} other {cargadores}}} gameVersion {{limit, plural, one {versión del juego} other {versiones del juego}}} other {{limit, plural, one {elemento} other {elementos}}}} de la tabla"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "Mostrando el top {count} {itemType, select, project {{count, plural, one {del proyecto} other {de todos los # proyectos}}} country {{count, plural, one {del país} other {de todos los # países}}} monetization {{count, plural, one {del valor de monetización} other {de todos los valores de monetización}}} downloadSource {{count, plural, one {de la fuente de descarga} other {de todas las # fuentes de descarga}}} downloadReason {{count, plural, one {de la razón de descarga} other {de todas las # razones de descarga}}} projectVersion {{count, plural, one {de la versión del proyecto} other {de todas las # versiones del proyecto}}} loader {{count, plural, one {del loader} other {de todos los # loaders}}} gameVersion {{count, plural, one {de la versión del juego} other {de todas las # versiones del juego}}} other {{count, plural, one {del ítem} other {de todos los # ítems}}}} de la tabla"
|
||||
"message": "Mostrando el top {count} de {itemType, select, project {{count, plural, one {proyecto} other {proyectos}}} country {{count, plural, one {país} other {países}}} monetization {{count, plural, one {valor de monetización} other {valores de monetización}}} downloadSource {{count, plural, one {fuente de descarga} other {fuentes de descarga}}} downloadReason {{count, plural, one {motivo de descarga} other {motivos de descarga}}} member {{count, plural, one {miembro} other {miembros}}} projectVersion {{count, plural, one {versión del proyecto} other {versiones del proyecto}}} loader {{count, plural, one {cargador} other {cargadores}}} gameVersion {{count, plural, one {versión del juego} other {versiones del juego}}} other {{count, plural, one {elemento} other {elementos}}}} de la tabla"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-on-project": {
|
||||
"message": "Depende de {project}"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-project-version": {
|
||||
"message": "{dependentProject} depende de {dependencyProject}, {version}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# día} other {# días}}"
|
||||
@@ -227,9 +248,15 @@
|
||||
"analytics.filter.search.countries": {
|
||||
"message": "Buscar países..."
|
||||
},
|
||||
"analytics.filter.search.dependent-projects": {
|
||||
"message": "Buscar proyectos..."
|
||||
},
|
||||
"analytics.filter.search.download-sources": {
|
||||
"message": "Buscar fuentes de descarga..."
|
||||
},
|
||||
"analytics.filter.search.members": {
|
||||
"message": "Buscar miembros..."
|
||||
},
|
||||
"analytics.filter.search.project-versions": {
|
||||
"message": "Buscar versiones del proyecto..."
|
||||
},
|
||||
@@ -476,6 +503,12 @@
|
||||
"analytics.value.monetized": {
|
||||
"message": "Monetizado"
|
||||
},
|
||||
"analytics.value.no-dependent": {
|
||||
"message": "Nada"
|
||||
},
|
||||
"analytics.value.no-dependent-tooltip": {
|
||||
"message": "Descargado por motivos distintos a ser una dependencia"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "Nada"
|
||||
},
|
||||
@@ -3293,9 +3326,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "Si necesitas ayuda o tienes consultas adicionales, por favor visita el <help-center-link>Centro de ayuda de Modrinth</help-center-link> y haz click en la burbuja azul para contactar con soporte."
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "Mostrar interfaz de miembros"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "Este es un hilo de conversación privado con los moderadores de Modrinth. Es posible que te envíen mensajes sobre cuestiones relacionadas con este proyecto."
|
||||
},
|
||||
@@ -3425,9 +3455,6 @@
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, one {Esta versión está retenida y no listada} other {Estas versiones están retenidas y no listadas}} públicamente. Por favor, proporciona pruebas de que tienes permiso para redistribuir algunos de los archivos incluidos en {count, plural, one {la versión} other {las versiones}} del modpack."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "Resolver"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, one {Versión {version_name} retenida} other {Versiones retenidas}} debido a que incluye contenido desconocido"
|
||||
},
|
||||
@@ -4544,6 +4571,9 @@
|
||||
"settings.sessions.description": {
|
||||
"message": "Aquí están todos los dispositivos que están actualmente conectados con tu cuenta Modrinth. Puedes cerrar sesión en cada uno de ellos individualmente.\n\nSi ves una entrada que no reconoces, cierra sesión en ese dispositivo y cambia la contraseña de tu cuenta Modrinth inmediatamente."
|
||||
},
|
||||
"settings.sessions.last-accessed-ago": {
|
||||
"message": "Último Acceso"
|
||||
},
|
||||
"settings.sessions.unknown-os": {
|
||||
"message": "Sistema operativo desconocido"
|
||||
},
|
||||
|
||||
@@ -1019,6 +1019,9 @@
|
||||
"dashboard.notifications.link.view-history": {
|
||||
"message": "Tingnan ang kasaysayan ng notipikasyon"
|
||||
},
|
||||
"dashboard.notifications.link.view-more": {
|
||||
"message": "Tingnan ang {extraNotifs} pang {extraNotifs, plural, other {notipikasyon}}"
|
||||
},
|
||||
"dashboard.organizations.button.create": {
|
||||
"message": "Lumikha ng organisasyon"
|
||||
},
|
||||
|
||||
@@ -23,6 +23,15 @@
|
||||
"analytics.breakdown.country": {
|
||||
"message": "Pays"
|
||||
},
|
||||
"analytics.breakdown.dependent-on": {
|
||||
"message": "Dépend de"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-download": {
|
||||
"message": "Projet dépendant"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-type": {
|
||||
"message": "Type de projet dépendant"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "Télécharger la raison"
|
||||
},
|
||||
@@ -38,6 +47,9 @@
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "Loader"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "Membre"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "Monétisation"
|
||||
},
|
||||
@@ -135,10 +147,22 @@
|
||||
"message": "Afficher les {count} lignes sur le graphique ?"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "Montrer {itemType, select, project {{count, plural, one {1 projet} other {tous les projets}}} country {{count, plural, one {1 pays} other {tous les pays}}} monetization {{count, plural, one {1 valeur de monétisation} other {toutes les valeurs de monétisation}}} downloadSource {{count, plural, one {1 source de téléchargement} other {toutes les sources de téléchargement}}} downloadReason {{count, plural, one {1 raison de téléchargement} other {toutes les raisons de téléchargement}}} projectVersion {{count, plural, one {1 version de projet} other {toutes les versions de projets}}} loader {{count, plural, one {1 loader} other {tous les loaders}}} gameVersion {{count, plural, one {1 version du jeu} other {toutes les version versions du jeu}}} other {{count, plural, one {l'objet} other {tous les objets}}}} du tableau"
|
||||
"message": "Affichage de tous les {itemType, select, project {{count, plural, one {projet} other {projets}}} country {{count, plural, one {pays} other {pays}}} monetization {{count, plural, one {valeur de monétisation} other {valeurs de monétisation}}} downloadSource {{count, plural, one {source de téléchargement} other {sources de téléchargement}}} downloadReason {{count, plural, one {motif de téléchargement} other {motifs de téléchargement}}} member {{count, plural, one {membre} other {membres}}} projectVersion {{count, plural, one {version du projet} other {versions du projet}}} loader {{count, plural, one {chargeur} other {chargeurs}}} gameVersion {{count, plural, one {version du jeu} other {versions du jeu}}} other {{count, plural, one {élément} other {éléments}}}} du tableau"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "Affichage de {count} {itemType, select, project {{count, plural, one {projet} other {projets}}} country {{count, plural, one {pays} other {pays}}} monetization {{count, plural, one {valeur de monétisation} other {valeurs de monétisation}}} downloadSource {{count, plural, one {source de téléchargement} other {sources de téléchargement}}} downloadReason {{count, plural, one {raison de téléchargement} other {raisons de téléchargement}}} projectVersion {{count, plural, one {version de projet} other {versions de projet}}} loader {{count, plural, one {chargeur} other {chargeurs}}} gameVersion {{count, plural, one {version de jeu} other {versions de jeu}}} other {{count, plural, one {élément} other {éléments}}}} du tableau"
|
||||
"message": "Affichage de {count} {itemType, select, project {{count, plural, one {projet} other {projets}}} country {{count, plural, one {pays} other {pays}}} monetization {{count, plural, one {valeur de monétisation} other {valeurs de monétisation}}} downloadSource {{count, plural, one {source de téléchargement} other {sources de téléchargement}}} downloadReason {{count, plural, one {motif de téléchargement} other {motifs de téléchargement}}} member {{count, plural, one {membre} other {membres}}} projectVersion {{count, plural, one {version du projet} other {versions du projet}}} loader {{count, plural, one {chargeur} other {chargeurs}}} gameVersion {{count, plural, one {version du jeu} other {versions du jeu}}} other {{count, plural, one {élément} other {éléments}}}} du tableau"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "Affichage de {limit} {itemType, select, project {{limit, plural, one {projet} other {projets}}} country {{limit, plural, one {pays} other {pays}}} monetization {{limit, plural, one {valeur de monétisation} other {valeurs de monétisation}}} downloadSource {{limit, plural, one {source de téléchargement} other {sources de téléchargement}}} downloadReason {{limit, plural, one {motif de téléchargement} other {motifs de téléchargement}}} member {{limit, plural, one {membre} other {membres}}} projectVersion {{limit, plural, one {version du projet} other {versions du projet}}} loader {{limit, plural, one {chargeur} other {chargeurs}}} gameVersion {{limit, plural, one {version du jeu} other {versions du jeu}}} other {{limit, plural, one {élément} other {éléments}}}} du tableau"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "Affichage des {count} {itemType, select, project {{count, plural, one {projet} other {projets}}} country {{count, plural, one {pays} other {pays}}} monetization {{count, plural, one {valeur de monétisation} other {valeurs de monétisation}}} downloadSource {{count, plural, one {source de téléchargement} other {sources de téléchargement}}} downloadReason {{count, plural, one {motif de téléchargement} other {motifs de téléchargement}}} member {{count, plural, one {membre} other {membres}}} projectVersion {{count, plural, one {version du projet} other {versions du projet}}} loader {{count, plural, one {chargeur} other {chargeurs}}} gameVersion {{count, plural, one {version du jeu} other {versions du jeu}}} other {{count, plural, one {élément} other {éléments}}}} les plus pertinents du tableau"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-on-project": {
|
||||
"message": "Dépend de {project}"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-project-version": {
|
||||
"message": "{dependentProject} dépend de {dependencyProject}, {version}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# jour} other {# jours}}"
|
||||
@@ -224,9 +248,15 @@
|
||||
"analytics.filter.search.countries": {
|
||||
"message": "Rechercher des pays..."
|
||||
},
|
||||
"analytics.filter.search.dependent-projects": {
|
||||
"message": "Rechercher des projets..."
|
||||
},
|
||||
"analytics.filter.search.download-sources": {
|
||||
"message": "Rechercher des sources de téléchargement..."
|
||||
},
|
||||
"analytics.filter.search.members": {
|
||||
"message": "Rechercher des membres..."
|
||||
},
|
||||
"analytics.filter.search.project-versions": {
|
||||
"message": "Rechercher des versions du projet..."
|
||||
},
|
||||
@@ -473,6 +503,12 @@
|
||||
"analytics.value.monetized": {
|
||||
"message": "Monétisé"
|
||||
},
|
||||
"analytics.value.no-dependent": {
|
||||
"message": "Aucun"
|
||||
},
|
||||
"analytics.value.no-dependent-tooltip": {
|
||||
"message": "Téléchargé pour des raisons autres que le fait d'être une dépendance"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "Aucun"
|
||||
},
|
||||
@@ -2984,11 +3020,14 @@
|
||||
"project-member-header.invitation-title": {
|
||||
"message": "Invitation à rejoindre un projet"
|
||||
},
|
||||
"project-member-header.invitation-with-role": {
|
||||
"message": "Vous avez été invité à être membre de ce projet sous le rôle de '{role}''."
|
||||
},
|
||||
"project-member-header.success-decline": {
|
||||
"message": "Vous avez refusé l’invitation à rejoindre l’équipe."
|
||||
"message": "Vous avez refusé l’invitation à rejoindre l’équipe"
|
||||
},
|
||||
"project-member-header.success-join": {
|
||||
"message": "Vous avez rejoint l’équipe du projet."
|
||||
"message": "Vous avez rejoint l’équipe du projet"
|
||||
},
|
||||
"project-moderation-nags.publishing-checklist": {
|
||||
"message": "Liste de contrôle de publication"
|
||||
@@ -3293,9 +3332,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "Si vous avez besoin d'aide ou si vous avez des demandes de renseignements supplémentaires, veuillez visiter le <help-center-link>Modrinth Help Center</help-center-link> et cliquez sur la bulle bleue pour contacter le support."
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "Montrer l'interface des membres"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "Il s'agit d'un fil de conversation privé avec les modérateurs du Modrinthe. Ils peuvent vous envoyer un message avec des problèmes concernant ce projet."
|
||||
},
|
||||
@@ -3425,9 +3461,6 @@
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, one {Cette version est actuellement indisponible et n'est pas répertoriée} other {Ces versions sont actuellement indisponibles et n'ont pas été répertoriées}} publiquement. Veuillez fournir la preuve que vous avez l'autorisation de redistribuer certains fichiers inclus dans {count, plural, one {la version} other {les versions}} du modpack."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "Résoudre"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, one {Version {version_name} non disponible} other {Versions non disponibles}} en raison de contenus intégrés inconnus"
|
||||
},
|
||||
|
||||
@@ -134,11 +134,14 @@
|
||||
"analytics.chart.render-limit.header": {
|
||||
"message": "Megjelenítse a grafikonon mind a {count} sort?"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "Mutatás {limit} {itemType, select, project {{limit, plural, one {project} other {projects}}} country {{limit, plural, one {country} other {countries}}} monetization {{limit, plural, one {monetization value} other {monetization values}}} downloadSource {{limit, plural, one {download source} other {download sources}}} downloadReason {{limit, plural, one {download reason} other {download reasons}}} projectVersion {{limit, plural, one {project version} other {project versions}}} loader {{limit, plural, one {loader} other {loaders}}} gameVersion {{limit, plural, one {game version} other {game versions}}} other {{limit, plural, one {item} other {items}}}} from table"
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count} nap"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "Mutatás top {count} {itemType, select, project {{count, plural, one {project} other {projects}}} country {{count, plural, one {country} other {countries}}} monetization {{count, plural, one {monetization value} other {monetization values}}} downloadSource {{count, plural, one {download source} other {download sources}}} downloadReason {{count, plural, one {download reason} other {download reasons}}} projectVersion {{count, plural, one {project version} other {project versions}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {game version} other {game versions}}} other {{count, plural, one {item} other {items}}}} from table"
|
||||
"analytics.chart.tooltip.duration.hours": {
|
||||
"message": "{count} óra"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.minutes": {
|
||||
"message": "{count} perc"
|
||||
},
|
||||
"analytics.chart.tooltip.hide-entry": {
|
||||
"message": "{name} elrejtése a grafikonon"
|
||||
@@ -326,6 +329,9 @@
|
||||
"analytics.project.all": {
|
||||
"message": "Összes projekt"
|
||||
},
|
||||
"analytics.project.count": {
|
||||
"message": "{count} projekt"
|
||||
},
|
||||
"analytics.project.icon-alt": {
|
||||
"message": "{name} ikon"
|
||||
},
|
||||
@@ -401,9 +407,30 @@
|
||||
"analytics.table.export-csv": {
|
||||
"message": "CSV exportálása"
|
||||
},
|
||||
"analytics.table.export.grouped": {
|
||||
"message": "{groupBy} szerint csoportosítva"
|
||||
},
|
||||
"analytics.table.search.placeholder": {
|
||||
"message": "Keresés..."
|
||||
},
|
||||
"analytics.title": {
|
||||
"message": "Statisztika"
|
||||
},
|
||||
"analytics.value.monetized": {
|
||||
"message": "Bevételszerzés"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "Nincs"
|
||||
},
|
||||
"analytics.value.other": {
|
||||
"message": "Egyéb"
|
||||
},
|
||||
"analytics.value.unknown": {
|
||||
"message": "Ismeretlen"
|
||||
},
|
||||
"analytics.value.unmonetized": {
|
||||
"message": "Nem bevételszerző"
|
||||
},
|
||||
"app-marketing.download.description": {
|
||||
"message": "Asztali alkalmazásunk minden platformon elérhető, válaszd ki a kívánt verziót."
|
||||
},
|
||||
@@ -518,6 +545,9 @@
|
||||
"app-marketing.features.performance.infinite-mb": {
|
||||
"message": "∞ MB"
|
||||
},
|
||||
"app-marketing.features.performance.infinite-times-infinite-mb": {
|
||||
"message": "∞ × ∞ MB"
|
||||
},
|
||||
"app-marketing.features.performance.less-than-150mb": {
|
||||
"message": "< 150 MB"
|
||||
},
|
||||
@@ -884,6 +914,9 @@
|
||||
"create-project-version.create-modal.stage.add-files.admonition": {
|
||||
"message": "A kiegészítő fájlok olyan kiegészítő forrásokhoz tartoznak, mint például a forráskód, nem pedig alternatív verziókhoz vagy változatokhoz."
|
||||
},
|
||||
"create.collection.collection-info": {
|
||||
"message": "Az új gyűjteményed nyilvános gyűjteményként jön létre {count, plural, =0 {projektek nélkül} other {# projekttel}}."
|
||||
},
|
||||
"create.collection.create-collection": {
|
||||
"message": "Gyűjtemény létrehozása"
|
||||
},
|
||||
@@ -1043,6 +1076,9 @@
|
||||
"dashboard.affiliate-links.search": {
|
||||
"message": "Társulati linkek keresése..."
|
||||
},
|
||||
"dashboard.analytics.from-projects": {
|
||||
"message": "{count} projektből"
|
||||
},
|
||||
"dashboard.analytics.total-downloads": {
|
||||
"message": "Összes letöltés"
|
||||
},
|
||||
@@ -1064,6 +1100,9 @@
|
||||
"dashboard.collections.empty.no-match-hint": {
|
||||
"message": "Próbáld meg módosítani a szűrőket vagy a keresési kifejezéseket."
|
||||
},
|
||||
"dashboard.collections.label.projects-count": {
|
||||
"message": "{count} projekt"
|
||||
},
|
||||
"dashboard.collections.label.search-input": {
|
||||
"message": "Keresd meg a gyűjteményeidet"
|
||||
},
|
||||
@@ -1346,12 +1385,18 @@
|
||||
"dashboard.notifications.link.view-history": {
|
||||
"message": "Értesítési előzmények megtekintése"
|
||||
},
|
||||
"dashboard.notifications.link.view-more": {
|
||||
"message": "További {extraNotifs} értesítés megtekintése"
|
||||
},
|
||||
"dashboard.organizations.button.create": {
|
||||
"message": "Szervezet létrehozása"
|
||||
},
|
||||
"dashboard.organizations.empty.cta": {
|
||||
"message": "Hozz létre egy szervezetet!"
|
||||
},
|
||||
"dashboard.organizations.member-count": {
|
||||
"message": "{count} tag"
|
||||
},
|
||||
"dashboard.organizations.title": {
|
||||
"message": "Szervezetek"
|
||||
},
|
||||
@@ -1394,12 +1439,18 @@
|
||||
"dashboard.projects.links.button.edit": {
|
||||
"message": "Linkek szerkesztése"
|
||||
},
|
||||
"dashboard.projects.links.changes-applied": {
|
||||
"message": "A változtatások <strong>{count}</strong> projektre vonatkoznak."
|
||||
},
|
||||
"dashboard.projects.links.discord-invite.description": {
|
||||
"message": "Meghívólink a Discord szerveredre."
|
||||
},
|
||||
"dashboard.projects.links.discord-invite.label": {
|
||||
"message": "Discord meghívó"
|
||||
},
|
||||
"dashboard.projects.links.header.edit": {
|
||||
"message": "Hivatkozások szerkesztése"
|
||||
},
|
||||
"dashboard.projects.links.issue-tracker.description": {
|
||||
"message": "Egy hely, ahol a felhasználók hibákat, problémákat és aggályokat jelenthetnek a projekteddel kapcsolatban."
|
||||
},
|
||||
@@ -2091,7 +2142,7 @@
|
||||
"message": "{time} kaptad"
|
||||
},
|
||||
"landing.notifications.version-released": {
|
||||
"message": "Egy új verzió {version} kijött erre: {gameVersion}"
|
||||
"message": "Egy új verzió ({version}) kijött erre: {gameVersion}"
|
||||
},
|
||||
"landing.section.for-creators.description": {
|
||||
"message": "Adj otthont alkotásaidnak az interneten, és érj el hatalmas közönséget elkötelezett játékosokból."
|
||||
@@ -2657,6 +2708,9 @@
|
||||
"muralpay.warning.wallet-address": {
|
||||
"message": "Nézd át jól a pénztárca címedet. Az egyenleg rossz címre lesz küldve az nem szerezhető vissza."
|
||||
},
|
||||
"organization.settings.projects.edit-links.affected-projects": {
|
||||
"message": "A módosítások {count} projektre vonatkoznak."
|
||||
},
|
||||
"profile.bio.fallback.creator": {
|
||||
"message": "Egy Modrinth fejlesztő."
|
||||
},
|
||||
@@ -2681,6 +2735,9 @@
|
||||
"profile.button.set-affiliate": {
|
||||
"message": "Beállítás társult vállalkozás ként"
|
||||
},
|
||||
"profile.collection.projects-count": {
|
||||
"message": "{count} projekt"
|
||||
},
|
||||
"profile.details.label.auth-providers": {
|
||||
"message": "Auth szolgáltatók"
|
||||
},
|
||||
@@ -2717,6 +2774,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Gyűjtemény"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} letöltés"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Csatlakozott"
|
||||
},
|
||||
@@ -2735,6 +2795,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Szervezetek"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} projekt"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Mentés..."
|
||||
},
|
||||
@@ -2744,6 +2807,9 @@
|
||||
"profile.meta.description-with-bio": {
|
||||
"message": "{bio} - Töltsd le {username} projektjeit a Modrinthon"
|
||||
},
|
||||
"profile.stats.projects-followers": {
|
||||
"message": "<stat>{count}</stat> projektkövető"
|
||||
},
|
||||
"profile.user-id": {
|
||||
"message": "Felhasználói azonosító: {id}"
|
||||
},
|
||||
@@ -3104,12 +3170,18 @@
|
||||
"project.settings.permissions.learn-more": {
|
||||
"message": "További információ"
|
||||
},
|
||||
"project.settings.permissions.search-placeholder": {
|
||||
"message": "Keresés {count} külső projekt között..."
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Beállítások"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Projektek irányítópult megnyitása"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count} letöltés"
|
||||
},
|
||||
"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."
|
||||
},
|
||||
@@ -3119,9 +3191,6 @@
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, one {Ez a verzió} other {Ezek a verziók}} jelenleg vissza van tartva, és nem érhető{count, plural, one {} other {k}} el nyilvánosan. Kérjük, igazold, hogy engedéllyel rendelkezel a modcsomag {count, plural, one {verziójában} other {verzióiban}} található bizonyos fájlok terjesztésére."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "Megoldás"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, one {A(z) {version_name} verzió} other {A verziók}} ismeretlen beágyazott tartalom miatt vissza lett{count, plural, one {} other {ek}} tartva"
|
||||
},
|
||||
|
||||
@@ -107,6 +107,9 @@
|
||||
"analytics.chart.empty.select-table-items": {
|
||||
"message": "Pilih benda dari tabel di bawah ini untuk memvisualisasi data Anda."
|
||||
},
|
||||
"analytics.chart.events.count-aria": {
|
||||
"message": "{count, plural, other {# acara analisis}}"
|
||||
},
|
||||
"analytics.chart.events.project-title": {
|
||||
"message": "<project>{projectName}</project>: {title}"
|
||||
},
|
||||
@@ -119,6 +122,15 @@
|
||||
"analytics.chart.render-limit.header": {
|
||||
"message": "Tampilkan semua ({count}) garis di grafik?"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, other {# hari}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.hours": {
|
||||
"message": "{count, plural, other {# jam}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.minutes": {
|
||||
"message": "{count, plural, other {# menit}}"
|
||||
},
|
||||
"analytics.chart.tooltip.hide-entry": {
|
||||
"message": "Sembunyikan {name} di grafik"
|
||||
},
|
||||
@@ -614,6 +626,9 @@
|
||||
"create-project-version.create-modal.stage.add-files.admonition": {
|
||||
"message": "Berkas tambahan hanya untuk sumber pendukung seperti kode sumber, bukan untuk versi atau varian lain."
|
||||
},
|
||||
"create.collection.collection-info": {
|
||||
"message": "Koleksi baru Anda akan dibuat sebagai koleksi publik dengan {count, plural, =0 {0 proyek} other {# proyek}}."
|
||||
},
|
||||
"create.collection.create-collection": {
|
||||
"message": "Buat koleksi"
|
||||
},
|
||||
@@ -788,6 +803,9 @@
|
||||
"dashboard.collections.empty.no-match-hint": {
|
||||
"message": "Coba sesuaikan kata kunci pencarian atau penyaringan Anda."
|
||||
},
|
||||
"dashboard.collections.label.projects-count": {
|
||||
"message": "{count} {countPlural, plural, other {proyek}}"
|
||||
},
|
||||
"dashboard.collections.label.search-input": {
|
||||
"message": "Cari koleksi Anda"
|
||||
},
|
||||
@@ -2246,6 +2264,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Koleksi"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, other {pengunduhan}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Telah bergabung"
|
||||
},
|
||||
@@ -2264,6 +2285,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Organisasi"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, other {proyek}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Menyimpan..."
|
||||
},
|
||||
@@ -2273,6 +2297,9 @@
|
||||
"profile.meta.description-with-bio": {
|
||||
"message": "{bio} - Unduh proyek milik {username} di Modrinth"
|
||||
},
|
||||
"profile.stats.projects-followers": {
|
||||
"message": "{count, plural, other {<stat>{count}</stat> pengikut proyek}}"
|
||||
},
|
||||
"profile.user-id": {
|
||||
"message": "Pengenal Pengguna: {id}"
|
||||
},
|
||||
|
||||
@@ -23,6 +23,15 @@
|
||||
"analytics.breakdown.country": {
|
||||
"message": "Paese"
|
||||
},
|
||||
"analytics.breakdown.dependent-on": {
|
||||
"message": "Dipendenza su"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-download": {
|
||||
"message": "Progetto dipendente"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-type": {
|
||||
"message": "Tipo progetto dipendente"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "Motivo del download"
|
||||
},
|
||||
@@ -38,6 +47,9 @@
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "Loader"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "Membro"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "Monetizzazione"
|
||||
},
|
||||
@@ -129,16 +141,22 @@
|
||||
"message": "Mostrare tutte le {count} linee nel grafico?"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "Mostrando {itemType, select, project {{count, plural, one {l'unico progetto} other {tutti i progetti}}} country {{count, plural, one {l'unico paese} other {tutti i paesi}}} monetization {{count, plural, one {l'unico valore} other {tutti i valori}} di monetizzazione} downloadSource {{count, plural, one {l'unica fonte} other {tutte le fonti}}} downloadReason {{count, plural, one {l'unico motivo} other {tutti i motivi}} di download} projectVersion {{count, plural, one {l'unica versione} other {tutte le versioni}} del progetto} loader {{count, plural, one {l'unico loader} other {tutti i loader}}} gameVersion {{count, plural, one {l'unica versione} other {tutte le versioni}} del gioco} other {{count, plural, one {l'unico elemento} other {tutti gli elementi}}}} dalla tabella"
|
||||
"message": "Mostrando {itemType, select, project {tutti i progetti} country {tutti i paesi} monetization {tutti i valori di monetizzazione} downloadSource {tutte le fonti di download} downloadReason {tutti i motivi di download} member {tutti i membri} projectVersion {tutte le versioni del progetto} loader {tutti i loader} gameVersion {tutte le versioni di gioco} other {tutti gli elementi}} dalla tabella"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "Mostrando {count} {itemType, select, project {{count, plural, one {progetto} other {progetti}}} country {{count, plural, one {paese} other {paesi}}} monetization {{count, plural, one {valore di monetizzazione} other {valori di monetizzazione}}} downloadSource {{count, plural, one {fonte} other {fonti}}} downloadReason {{count, plural, one {motivo} other {motivi}}} projectVersion {{count, plural, one {versione del progetto} other {versioni del progetto}}} loader {loader} gameVersion {{count, plural, one {versione di gioco} other {versioni di gioco}}} other {{count, plural, one {elemento} other {elementi}}}} dalla tabella"
|
||||
"message": "Mostrando {count} {itemType, select, project {{count, plural, one {progetto} other {progetti}}} country {{count, plural, one {paese} other {paesi}}} monetization {{count, plural, one {valore} other {valori}} di monetizzazione} downloadSource {{count, plural, one {fonte} other {fonti}} di download} downloadReason {{count, plural, one {motivo} other {motivi}} di download} member {{count, plural, one {membro} other {membri}}} projectVersion {{count, plural, one {versione} other {versioni}} del progetto} loader {loader} gameVersion {{count, plural, one {versione} other {versioni}} di gioco} other {{count, plural, one {elemento} other {elementi}}}} dalla tabella"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "Mostrando {limit} {itemType, select, project {{limit, plural, one {progetto} other {progetti}}} country {{limit, plural, one {paese} other {paesi}}} monetization {{limit, plural, one {valore di monetizzazione} other {valori di monetizzazione}}} downloadSource {{limit, plural, one {fonte} other {fonti}}} downloadReason {{limit, plural, one {motivo} other {motivi}}} projectVersion {{limit, plural, one {versione del progetto} other {versioni del progetto}}} loader {loader} gameVersion {{limit, plural, one {versione di gioco} other {versioni di gioco}}} other {{limit, plural, one {elemento} other {elementi}}}} dalla tabella"
|
||||
"message": "Mostrando {limit} {itemType, select, project {{limit, plural, one {progetto} other {progetti}}} country {{limit, plural, one {paese} other {paesi}}} monetization {{limit, plural, one {valore} other {valori}} di monetizzazione} downloadSource {{limit, plural, one {fonte} other {fonti}} di download} downloadReason {{limit, plural, one {motivo} other {motivi}} di download} member {{limit, plural, one {membro} other {membri}}} projectVersion {{limit, plural, one {versione} other {versioni}} del progetto} loader {loader} gameVersion {{limit, plural, one {versione} other {versioni}} di gioco} other {{limit, plural, one {elemento} other {elementi}}}} dalla tabella"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "Mostrando {itemType, select, project {{count, plural, one {il primo progetto} other {i primi # progetti}}} country {{count, plural, one {il primo paese} other {i primi # paesi}}} monetization {{count, plural, one {il primo valore di monetizzazione} other {i primi # valori di monetizzazione}}} downloadSource {{count, plural, one {la prima fonte} other {le prime # fonti}}} downloadReason {{count, plural, one {il primo motivo} other {i primi # motivi}}} projectVersion {{count, plural, one {la prima versione del progetto} other {le prime # versioni del progetto}}} loader {{count, plural, one {il primo loader} other {i primi # loader}}} gameVersion {{count, plural, one {la prima versione di gioco} other {le prime # versioni di gioco}}} other {{count, plural, one {il primo elemento} other {i primi {count} elementi}}}} dalla tabella"
|
||||
"message": "Mostrando {itemType, select, project {{count, plural, one {il primo progetto} other {i primi # progetti}}} country {{count, plural, one {il primo paese} other {i primi # paesi}}} monetization {{count, plural, one {il primo valore} other {i primi # valori}} di monetizzazione} downloadSource {{count, plural, one {la prima fonte} other {le prime # fonti}} di download} downloadReason {{count, plural, one {il primo motivo} other {i primi # motivi}} di download} member {{count, plural, one {il primo membro} other {i primi # membri}}} projectVersion {{count, plural, one {la prima versione} other {le prime # versioni}} del progetto} loader {{count, plural, one {il primo} other {i primi #}} loader} gameVersion {{count, plural, one {la prima versione} other {le prime # versioni}} di gioco} other {{count, plural, one {il primo elemento} other {i primi {count} elementi}}}} dalla tabella"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-on-project": {
|
||||
"message": "Dipendente su {project}"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-project-version": {
|
||||
"message": "{dependentProject} dipende su {dependencyProject}, {version}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# giorno} other {# giorni}}"
|
||||
@@ -224,9 +242,15 @@
|
||||
"analytics.filter.search.countries": {
|
||||
"message": "Cerca tra i paesi..."
|
||||
},
|
||||
"analytics.filter.search.dependent-projects": {
|
||||
"message": "Cerca tra i progetti..."
|
||||
},
|
||||
"analytics.filter.search.download-sources": {
|
||||
"message": "Cerca tra le fonti di download..."
|
||||
},
|
||||
"analytics.filter.search.members": {
|
||||
"message": "Cerca tra i membri..."
|
||||
},
|
||||
"analytics.filter.search.project-versions": {
|
||||
"message": "Cerca tra le versioni del progetto..."
|
||||
},
|
||||
@@ -473,6 +497,12 @@
|
||||
"analytics.value.monetized": {
|
||||
"message": "Monetizzato"
|
||||
},
|
||||
"analytics.value.no-dependent": {
|
||||
"message": "Nessuno"
|
||||
},
|
||||
"analytics.value.no-dependent-tooltip": {
|
||||
"message": "Scaricato per altri motivi che non siano per dipendenza"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "Nessuno"
|
||||
},
|
||||
@@ -1163,6 +1193,9 @@
|
||||
"dashboard.affiliate-links.search": {
|
||||
"message": "Cerca tra i link affiliati..."
|
||||
},
|
||||
"dashboard.analytics.from-projects": {
|
||||
"message": "da {count, plural, one {# progetto} other {# progetti}}"
|
||||
},
|
||||
"dashboard.analytics.total-downloads": {
|
||||
"message": "Download totali"
|
||||
},
|
||||
@@ -1487,6 +1520,9 @@
|
||||
"dashboard.notifications.link.view-history": {
|
||||
"message": "Mostra cronologia notifiche"
|
||||
},
|
||||
"dashboard.notifications.link.view-more": {
|
||||
"message": "Mostra {extraNotifs, plural, one {# altra notifica} other {altre # notifiche}}"
|
||||
},
|
||||
"dashboard.organizations.button.create": {
|
||||
"message": "Crea organizzazione"
|
||||
},
|
||||
@@ -1496,6 +1532,9 @@
|
||||
"dashboard.organizations.error.fetch": {
|
||||
"message": "Impossibile ottenere le organizzazioni"
|
||||
},
|
||||
"dashboard.organizations.member-count": {
|
||||
"message": "{count, plural, one {# membro} other {# membri}}"
|
||||
},
|
||||
"dashboard.organizations.title": {
|
||||
"message": "Organizzazioni"
|
||||
},
|
||||
@@ -2915,6 +2954,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Raccolta"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} download"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Iscrizione"
|
||||
},
|
||||
@@ -2951,6 +2993,9 @@
|
||||
"profile.official-account.bio": {
|
||||
"message": "L'account ufficiale di Modrinth. Ricevi assistenza presso <support-link></support-link> o tramite mail presso <email></email>"
|
||||
},
|
||||
"profile.stats.projects-followers": {
|
||||
"message": "<stat>{count, plural, =0 {Nessun} other {{count}}}</stat> follower del progetto"
|
||||
},
|
||||
"profile.user-id": {
|
||||
"message": "ID utente: {id}"
|
||||
},
|
||||
@@ -3278,9 +3323,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "Se hai bisogno di assistenza o hai altre richieste, visita il <help-center-link>centro assistenza di Modrinth</help-center-link> e clicca sulla bolla blu nell'angolo in basso a destra."
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "Mostra interfaccia degli utenti"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "Questa è una conversazione privata con i moderatori di Modrinth. Sarai contattato per eventuali problemi riguardanti questo progetto."
|
||||
},
|
||||
@@ -3386,12 +3428,21 @@
|
||||
"project.settings.permissions.learn-more": {
|
||||
"message": "Scopri di più"
|
||||
},
|
||||
"project.settings.permissions.search-placeholder": {
|
||||
"message": "Cerca tra {count, plural, one {# progetto esterno} other {# progetti esterni}}..."
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Impostazioni"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Visita bacheca del progetto"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count} download"
|
||||
},
|
||||
"project.stats.followers-label": {
|
||||
"message": "{count} follower"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} è stato archiviato. {title} non riceverà più aggiornamenti a meno che l'autore decida di rimuoverlo dall'archivio."
|
||||
},
|
||||
@@ -3401,9 +3452,6 @@
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, one {Questa versione è attualmente sospesa e non elencata} other {Queste versioni sono attualmente sospese e non elencate}} pubblicamente. Devi dimostrare di avere il permesso di ridistribuire alcuni dei file presenti in {count, plural, one {questa versione} other {queste versioni}} del pacchetto."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "Risolvi"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, one {La versione {version_name} è stata sospesa} other {Alcune versioni sono state sospese}} per attribuzioni incomplete"
|
||||
},
|
||||
|
||||
@@ -23,14 +23,20 @@
|
||||
"analytics.breakdown.country": {
|
||||
"message": "国"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-download": {
|
||||
"message": "依存プロジェクト"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-type": {
|
||||
"message": "依存プロジェクトの種類"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "理由"
|
||||
},
|
||||
"analytics.breakdown.download-source": {
|
||||
"message": "流入元"
|
||||
"message": "ソース"
|
||||
},
|
||||
"analytics.breakdown.game-version": {
|
||||
"message": "マインクラフト"
|
||||
"message": "ゲームのバージョン"
|
||||
},
|
||||
"analytics.breakdown.generic": {
|
||||
"message": "内訳"
|
||||
@@ -38,9 +44,15 @@
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "ローダー"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "メンバー"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "収益化"
|
||||
},
|
||||
"analytics.breakdown.none.selected": {
|
||||
"message": "分析 - デフォルト"
|
||||
},
|
||||
"analytics.breakdown.project": {
|
||||
"message": "プロジェクト"
|
||||
},
|
||||
@@ -48,7 +60,10 @@
|
||||
"message": "ステータス"
|
||||
},
|
||||
"analytics.breakdown.project-version": {
|
||||
"message": "バージョン"
|
||||
"message": "プロジェクトのバージョン"
|
||||
},
|
||||
"analytics.breakdown.selected": {
|
||||
"message": "分析 - {breakdown}"
|
||||
},
|
||||
"analytics.chart.action.show-all": {
|
||||
"message": "すべて表示"
|
||||
@@ -59,6 +74,45 @@
|
||||
"analytics.chart.axis.playtime-hours": {
|
||||
"message": "{hours}時間"
|
||||
},
|
||||
"analytics.chart.controls.active-count": {
|
||||
"message": "{count}件がアクティブ"
|
||||
},
|
||||
"analytics.chart.controls.annotations": {
|
||||
"message": "注釈"
|
||||
},
|
||||
"analytics.chart.controls.aria": {
|
||||
"message": "アナリティクスのグラフ設定, {activeCount}"
|
||||
},
|
||||
"analytics.chart.controls.button": {
|
||||
"message": "設定"
|
||||
},
|
||||
"analytics.chart.controls.dialog-aria": {
|
||||
"message": "アナリティクスのグラフ設定"
|
||||
},
|
||||
"analytics.chart.controls.display": {
|
||||
"message": "ディスプレイ"
|
||||
},
|
||||
"analytics.chart.controls.modrinth-events": {
|
||||
"message": "Modrinth"
|
||||
},
|
||||
"analytics.chart.controls.no-modrinth-events": {
|
||||
"message": "Modrinthのイベントがありません。"
|
||||
},
|
||||
"analytics.chart.controls.no-project-events": {
|
||||
"message": "プロジェクトのイベントがありません。"
|
||||
},
|
||||
"analytics.chart.controls.previous-period": {
|
||||
"message": "1期前の描画"
|
||||
},
|
||||
"analytics.chart.controls.project-events": {
|
||||
"message": "プロジェクト"
|
||||
},
|
||||
"analytics.chart.controls.ratio": {
|
||||
"message": ""
|
||||
},
|
||||
"analytics.chart.tooltip.total": {
|
||||
"message": "合計"
|
||||
},
|
||||
"analytics.chart.view.area": {
|
||||
"message": "エリア"
|
||||
},
|
||||
@@ -75,7 +129,7 @@
|
||||
"message": "Modパック"
|
||||
},
|
||||
"analytics.download-reason.standalone": {
|
||||
"message": "新規"
|
||||
"message": "スタンドアローン"
|
||||
},
|
||||
"analytics.download-reason.update": {
|
||||
"message": "更新"
|
||||
@@ -86,29 +140,77 @@
|
||||
"analytics.download-source.website": {
|
||||
"message": "Modrinth Web"
|
||||
},
|
||||
"analytics.downloads.suffix": {
|
||||
"message": "ダウンロード"
|
||||
},
|
||||
"analytics.empty.no-data": {
|
||||
"message": "使用可能なデータがありません"
|
||||
},
|
||||
"analytics.empty.no-data-for-analytics": {
|
||||
"message": "統計に使用可能なデータがありません"
|
||||
},
|
||||
"analytics.filter.game-version-type.all": {
|
||||
"message": "全て"
|
||||
},
|
||||
"analytics.filter.game-version-type.release": {
|
||||
"message": "リリース"
|
||||
},
|
||||
"analytics.filter.search.countries": {
|
||||
"message": "国を検索..."
|
||||
"message": "国を検索…"
|
||||
},
|
||||
"analytics.filter.search.project-versions": {
|
||||
"message": "プロジェクトバージョンを検索…"
|
||||
},
|
||||
"analytics.filter.search.versions": {
|
||||
"message": "バージョンを検索…"
|
||||
},
|
||||
"analytics.graph.title.downloads": {
|
||||
"message": "ダウンロード回数の推移"
|
||||
"message": "ダウンロードの推移"
|
||||
},
|
||||
"analytics.graph.title.revenue": {
|
||||
"message": "収益の推移"
|
||||
},
|
||||
"analytics.project-event.project-approved": {
|
||||
"message": "承認完了"
|
||||
"message": "承認済み"
|
||||
},
|
||||
"analytics.project-status.approved": {
|
||||
"message": "承認済み"
|
||||
},
|
||||
"analytics.project-status.private": {
|
||||
"message": "非公開"
|
||||
},
|
||||
"analytics.project-status.unlisted": {
|
||||
"message": "限定公開"
|
||||
},
|
||||
"analytics.project.all": {
|
||||
"message": "全てのプロジェクト"
|
||||
},
|
||||
"analytics.query.label.breakdown": {
|
||||
"message": "分析"
|
||||
},
|
||||
"analytics.query.label.grouped-by": {
|
||||
"message": "時間足"
|
||||
},
|
||||
"analytics.query.label.project": {
|
||||
"message": "プロジェクト"
|
||||
},
|
||||
"analytics.query.label.timeframe": {
|
||||
"message": "期間"
|
||||
},
|
||||
"analytics.stat.downloads": {
|
||||
"message": "ダウンロード回数"
|
||||
"message": "ダウンロード"
|
||||
},
|
||||
"analytics.stat.monetization-banner.body": {
|
||||
"message": "Modrinthを通じて行われた閲覧およびダウンロードが収益の対象となります。\nまた、Webからの場合は不正防止のためのフィルターを通過する必要があり、アプリからの場合は先述のフィルターに加え、Modrinthにログインされたユーザーに限ります。\n注意として、すべてのプロジェクトにおいて、収益の対象となる操作の割合はほぼ均一に保たれるため、最終的な収益で不公平が生まれることはありません。"
|
||||
},
|
||||
"analytics.stat.monetization-banner.learn-more": {
|
||||
"message": "もっと詳しく"
|
||||
},
|
||||
"analytics.stat.monetization-banner.title": {
|
||||
"message": "収益が発生する仕組みは?"
|
||||
},
|
||||
"analytics.stat.playtime": {
|
||||
"message": "プレイ時間"
|
||||
"message": "プレイ"
|
||||
},
|
||||
"analytics.stat.playtime-hours": {
|
||||
"message": "{hours}時間"
|
||||
@@ -128,20 +230,56 @@
|
||||
"analytics.stat.unavailable": {
|
||||
"message": "N/A"
|
||||
},
|
||||
"analytics.stat.unavailable-tooltip": {
|
||||
"message": "現在のクエリでは利用不可"
|
||||
},
|
||||
"analytics.stat.views": {
|
||||
"message": "表示回数"
|
||||
"message": "表示"
|
||||
},
|
||||
"analytics.table.csv.date-range": {
|
||||
"message": "{start}から{end}"
|
||||
},
|
||||
"analytics.table.csv.header.playtime-seconds": {
|
||||
"message": "プレイ時間 (秒)"
|
||||
},
|
||||
"analytics.table.duration.days": {
|
||||
"message": "{count, number}日"
|
||||
},
|
||||
"analytics.table.duration.hours": {
|
||||
"message": "{count, number}時間"
|
||||
},
|
||||
"analytics.table.duration.minutes": {
|
||||
"message": "{count, number}分"
|
||||
},
|
||||
"analytics.table.export-csv": {
|
||||
"message": "CSVをエクスポート"
|
||||
},
|
||||
"analytics.table.pagination.summary": {
|
||||
"message": "{start}~{end}件目を表示中 (全{total}件)"
|
||||
},
|
||||
"analytics.table.search.placeholder": {
|
||||
"message": "検索..."
|
||||
"message": "検索…"
|
||||
},
|
||||
"analytics.title": {
|
||||
"message": "アナリティクス"
|
||||
},
|
||||
"analytics.value.monetized": {
|
||||
"message": "設定済み"
|
||||
"message": "発生済み"
|
||||
},
|
||||
"analytics.value.no-dependent": {
|
||||
"message": "なし"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "デフォルト"
|
||||
},
|
||||
"analytics.value.other": {
|
||||
"message": "その他"
|
||||
},
|
||||
"analytics.value.unknown": {
|
||||
"message": "不明"
|
||||
},
|
||||
"analytics.value.unmonetized": {
|
||||
"message": "未設定"
|
||||
"message": "未発生"
|
||||
},
|
||||
"app-marketing.download.description": {
|
||||
"message": "我々のデスクトップアプリはすべてのプラットフォームでご利用いただけますので、ご希望のバージョンをお選びください。"
|
||||
@@ -257,6 +395,9 @@
|
||||
"app-marketing.features.performance.infinite-mb": {
|
||||
"message": "∞ MB"
|
||||
},
|
||||
"app-marketing.features.performance.infinite-times-infinite-mb": {
|
||||
"message": "∞ × ∞ MB"
|
||||
},
|
||||
"app-marketing.features.performance.less-than-150mb": {
|
||||
"message": "< 150 MB"
|
||||
},
|
||||
@@ -546,11 +687,14 @@
|
||||
"message": "送信して承認"
|
||||
},
|
||||
"conversation-thread.reply-editor.placeholder.send": {
|
||||
"message": "メッセージを送る..."
|
||||
"message": "メッセージを送る…"
|
||||
},
|
||||
"create-project-version.create-modal.stage.add-files.admonition": {
|
||||
"message": "補足ファイルはソースコードなどの支援用リソースのためのものであり、別バージョンや派生版を配布するためのものではありません。"
|
||||
},
|
||||
"create.collection.collection-info": {
|
||||
"message": "新しいコレクションは、{count, plural, =0 {空の} other {#個のプロジェクトを含む}}公開コレクションとして作成されます。"
|
||||
},
|
||||
"create.collection.create-collection": {
|
||||
"message": "コレクションを作成"
|
||||
},
|
||||
@@ -693,7 +837,7 @@
|
||||
"message": "アフィリエイトリンクを作成"
|
||||
},
|
||||
"dashboard.affiliate-links.empty.no-codes": {
|
||||
"message": "アフィリエイトコードが見つかりませんでした"
|
||||
"message": "アフィリエイトコードが見つかりませんでした。"
|
||||
},
|
||||
"dashboard.affiliate-links.error.title": {
|
||||
"message": "アフィリエイトリンクの読み込みエラー"
|
||||
@@ -713,6 +857,9 @@
|
||||
"dashboard.affiliate-links.search": {
|
||||
"message": "アフィリエイトリンクを検索…"
|
||||
},
|
||||
"dashboard.analytics.from-projects": {
|
||||
"message": "{count} 件のプロジェクトから"
|
||||
},
|
||||
"dashboard.analytics.total-downloads": {
|
||||
"message": "総ダウンロード数"
|
||||
},
|
||||
@@ -744,7 +891,7 @@
|
||||
"message": "コレクション"
|
||||
},
|
||||
"dashboard.collections.placeholder.search": {
|
||||
"message": "コレクションを検索"
|
||||
"message": "コレクションを検索…"
|
||||
},
|
||||
"dashboard.collections.sort.name-ascending": {
|
||||
"message": "名前順(昇順)"
|
||||
@@ -1016,6 +1163,9 @@
|
||||
"dashboard.notifications.link.view-history": {
|
||||
"message": "通知履歴を表示"
|
||||
},
|
||||
"dashboard.notifications.link.view-more": {
|
||||
"message": "{extraNotifs} 件の通知をさらに表示"
|
||||
},
|
||||
"dashboard.organizations.button.create": {
|
||||
"message": "組織を作成"
|
||||
},
|
||||
@@ -1025,23 +1175,41 @@
|
||||
"dashboard.organizations.error.fetch": {
|
||||
"message": "組織の取得に失敗しました"
|
||||
},
|
||||
"dashboard.organizations.member-count": {
|
||||
"message": "{count} 人のメンバー"
|
||||
},
|
||||
"dashboard.organizations.title": {
|
||||
"message": "組織"
|
||||
},
|
||||
"dashboard.overview.notifications.button.mark-all-as-read": {
|
||||
"message": "全て既読にする"
|
||||
},
|
||||
"dashboard.overview.notifications.button.view-history": {
|
||||
"message": "履歴を表示"
|
||||
},
|
||||
"dashboard.overview.notifications.history.label": {
|
||||
"message": "履歴"
|
||||
},
|
||||
"dashboard.overview.notifications.history.title": {
|
||||
"message": "通知履歴"
|
||||
},
|
||||
"dashboard.overview.notifications.loading": {
|
||||
"message": "通知を読み込み中…"
|
||||
},
|
||||
"dashboard.projects.bulk-edit-hint": {
|
||||
"message": "以下で選択することで、複数のプロジェクトを一括で編集できます"
|
||||
"message": "以下で選択することで、複数のプロジェクトを一括で編集できます。"
|
||||
},
|
||||
"dashboard.projects.bulk-edit.server-disabled": {
|
||||
"message": "サーバープロジェクトでは一括編集を利用できません"
|
||||
},
|
||||
"dashboard.projects.empty": {
|
||||
"message": "まだプロジェクトがありません。上にある緑のボタンを押して始めましょう"
|
||||
"message": "まだプロジェクトがありません。上にある緑のボタンを押して始めましょう。"
|
||||
},
|
||||
"dashboard.projects.head-title": {
|
||||
"message": "プロジェクト"
|
||||
},
|
||||
"dashboard.projects.links.and-more": {
|
||||
"message": "さらに {count} 件..."
|
||||
"message": "さらに {count} 件…"
|
||||
},
|
||||
"dashboard.projects.links.button.clear-link": {
|
||||
"message": "リンクを削除"
|
||||
@@ -1049,17 +1217,23 @@
|
||||
"dashboard.projects.links.button.edit": {
|
||||
"message": "リンクを編集"
|
||||
},
|
||||
"dashboard.projects.links.changes-applied": {
|
||||
"message": "変更は <strong>{count}</strong> 件のプロジェクトに適用されます"
|
||||
},
|
||||
"dashboard.projects.links.description": {
|
||||
"message": "下記に入力したリンクは、選択した各プロジェクトに上書きされます。空欄のままにしたリンクは無視されます。ゴミ箱ボタンを使用すると、選択したすべてのプロジェクトからリンクを削除できます。"
|
||||
},
|
||||
"dashboard.projects.links.discord-invite.description": {
|
||||
"message": "Discordサーバーへの招待リンク"
|
||||
"message": "Discordサーバーへの招待リンク。"
|
||||
},
|
||||
"dashboard.projects.links.discord-invite.label": {
|
||||
"message": "Discordの招待"
|
||||
},
|
||||
"dashboard.projects.links.header.edit": {
|
||||
"message": "リンクを編集"
|
||||
},
|
||||
"dashboard.projects.links.issue-tracker.description": {
|
||||
"message": "ユーザーがプロジェクトに関するバグ、問題、懸念事項を報告できる場所"
|
||||
"message": "ユーザーがプロジェクトに関するバグ、問題、懸念事項を報告できる場所。"
|
||||
},
|
||||
"dashboard.projects.links.issue-tracker.label": {
|
||||
"message": "問題の報告と追跡"
|
||||
@@ -1086,7 +1260,7 @@
|
||||
"message": "ウィキページ"
|
||||
},
|
||||
"dashboard.projects.notification.bulk-edit-success": {
|
||||
"message": "選択されたプロジェクトのリンクを一括編集しました"
|
||||
"message": "選択されたプロジェクトのリンクを一括編集しました。"
|
||||
},
|
||||
"dashboard.projects.project.icon-alt": {
|
||||
"message": "{title} のアイコン"
|
||||
@@ -1347,7 +1521,7 @@
|
||||
"message": "コレクションが見つかりません"
|
||||
},
|
||||
"error.generic.401.signed-in-as": {
|
||||
"message": "現在サインイン中のアカウント:"
|
||||
"message": "現在サインイン中のアカウント:"
|
||||
},
|
||||
"error.generic.401.title": {
|
||||
"message": "このページにアクセスする権限がありません"
|
||||
@@ -2360,6 +2534,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "コレクション"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count}件のダウンロード"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "参加: "
|
||||
},
|
||||
@@ -3537,7 +3714,7 @@
|
||||
"message": "{shared}個の共有されたCPU ({bursts}個のCPUに増加)"
|
||||
},
|
||||
"settings.billing.pyro.linked-server.not-found": {
|
||||
"message": "このサブスクリプションに対応するサーバーが見つかりませんでした。これにはいくつか説明があります。あなたがサーバーを購入してすぐの場合、これは通常であり、サーバーが提供されるまで長くて1時間かかります。しばらく前にサーバーを購入していた場合はおそらくそれ以来サーバーが停止されています。これが期待したものではない場合は、以下の情報と共にModrinth Supportにお問い合わせください。"
|
||||
"message": "このサブスクリプションに対応するサーバーが見つかりませんでした。これにはいくつか説明があります。あなたがサーバーを購入してすぐの場合、これは通常であり、サーバーが提供されるまで長くて1時間かかります。しばらく前にサーバーを購入していた場合はおそらくそれ以来サーバーが停止されています。これが期待したものではない場合は、以下の情報と共にModrinth Supportにお問い合わせください:"
|
||||
},
|
||||
"settings.billing.pyro.linked-server.server-id": {
|
||||
"message": "サーバーID: {id}"
|
||||
|
||||
@@ -530,6 +530,9 @@
|
||||
"create-project-version.create-modal.stage.add-files.admonition": {
|
||||
"message": "보조 파일은 소스 코드와 같은 지원용 리소스를 위한 것이며, 대체 버전이나 변형을 위한 것이 아닙니다."
|
||||
},
|
||||
"create.collection.collection-info": {
|
||||
"message": "새 컬렉션은 {count, plural, =0 {프로젝트 없음} other {#개의 프로젝트}}를 포함한 공개 컬렉션으로 생성됩니다."
|
||||
},
|
||||
"create.collection.create-collection": {
|
||||
"message": "컬렉션 생성"
|
||||
},
|
||||
@@ -686,6 +689,9 @@
|
||||
"dashboard.affiliate-links.revoke-confirm.button": {
|
||||
"message": "취소"
|
||||
},
|
||||
"dashboard.affiliate-links.revoke-confirm.title": {
|
||||
"message": "'{title}' 제휴 링크를 정말 삭제하시겠습니까?"
|
||||
},
|
||||
"dashboard.affiliate-links.search": {
|
||||
"message": "제휴 링크 검색..."
|
||||
},
|
||||
@@ -998,6 +1004,9 @@
|
||||
"dashboard.notifications.link.view-history": {
|
||||
"message": "알림 기록 보기"
|
||||
},
|
||||
"dashboard.notifications.link.view-more": {
|
||||
"message": "알림 {extraNotifs}개 더 보기"
|
||||
},
|
||||
"dashboard.organizations.button.create": {
|
||||
"message": "조직 생성"
|
||||
},
|
||||
@@ -1007,6 +1016,9 @@
|
||||
"dashboard.organizations.error.fetch": {
|
||||
"message": "조직 정보 가져오기 실패"
|
||||
},
|
||||
"dashboard.organizations.member-count": {
|
||||
"message": "멤버 {count}명"
|
||||
},
|
||||
"dashboard.organizations.title": {
|
||||
"message": "조직"
|
||||
},
|
||||
@@ -1052,6 +1064,9 @@
|
||||
"dashboard.projects.links.button.edit": {
|
||||
"message": "링크 편집"
|
||||
},
|
||||
"dashboard.projects.links.changes-applied": {
|
||||
"message": "변경사항이 <strong>{count}개</strong>의 프로젝트에 적용됩니다."
|
||||
},
|
||||
"dashboard.projects.links.description": {
|
||||
"message": "아래 지정한 링크는 선택한 각 프로젝트에서 덮어쓰게 됩니다. 비워 둔 항목은 무시됩니다. 휴지통 버튼을 클릭하면 선택한 모든 프로젝트에서 링크를 삭제할 수 있습니다."
|
||||
},
|
||||
@@ -2423,6 +2438,9 @@
|
||||
"profile.meta.description-with-bio": {
|
||||
"message": "{bio} - Modrinth에서 {username}의 프로젝트 다운로드"
|
||||
},
|
||||
"profile.stats.projects-followers": {
|
||||
"message": "{count, plural, other {<stat>{count}</stat> 프로젝트 팔로워}}"
|
||||
},
|
||||
"profile.user-id": {
|
||||
"message": "사용자 ID: {id}"
|
||||
},
|
||||
@@ -2750,9 +2768,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "도움이 필요하거나 추가 문의 사항이 있다면 <help-center-link>Modrinth 도움말 센터</help-center-link>를 방문하여 파란색 말풍선을 클릭해 지원 센터에 문의해 주세요."
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "멤버 UI 표시"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "이곳은 Modrinth 운영진과의 비공개 대화 스레드입니다. 운영진이 이 프로젝트와 관련된 사항에 대해 메시지를 보낼 수 있습니다."
|
||||
},
|
||||
@@ -2858,6 +2873,9 @@
|
||||
"project.settings.permissions.learn-more": {
|
||||
"message": "더보기"
|
||||
},
|
||||
"project.settings.permissions.search-placeholder": {
|
||||
"message": "{count}개의 {count, plural, other {외부 프로젝트}} 검색..."
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "설정"
|
||||
},
|
||||
@@ -2870,8 +2888,11 @@
|
||||
"project.versions.title": {
|
||||
"message": "버전"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "해결"
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, other {해당 버전은}} 현재 보류 상태이며 공개되지 않았습니다. 이 모드팩 {count, plural, other {버전에}} 포함된 특정 파일들을 재배포할 수 있는 권한이 있음을 증명하는 자료를 제출해주세요."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "알 수 없는 내장 콘텐츠로 인해 일부 {count, plural, other {버전}}은 공개되지 않았습니다"
|
||||
},
|
||||
"report.already-reported": {
|
||||
"message": "이미 {title} 을(를) 신고했습니다"
|
||||
|
||||
@@ -107,6 +107,9 @@
|
||||
"analytics.chart.empty.select-table-items": {
|
||||
"message": "Pilih item daripada jadual di bawah untuk menggambarkan data anda."
|
||||
},
|
||||
"analytics.chart.events.count-aria": {
|
||||
"message": "{count, plural, other {# peristiwa analitik}}"
|
||||
},
|
||||
"analytics.chart.events.project-title": {
|
||||
"message": "<project>{projectName}</project>: {title}"
|
||||
},
|
||||
@@ -125,6 +128,15 @@
|
||||
"analytics.chart.legend.previous-period-suffix": {
|
||||
"message": "{name} (Sblm.)"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, other {# hari}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.hours": {
|
||||
"message": "{count, plural, other {# jam}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.minutes": {
|
||||
"message": "{count, plural, other {# minit}}"
|
||||
},
|
||||
"analytics.chart.tooltip.hide-entry": {
|
||||
"message": "Sembunyikan {name} dalam graf"
|
||||
},
|
||||
@@ -293,6 +305,9 @@
|
||||
"analytics.project.all": {
|
||||
"message": "Semua projek"
|
||||
},
|
||||
"analytics.project.count": {
|
||||
"message": "{count, plural, other {# projek}}"
|
||||
},
|
||||
"analytics.project.icon-alt": {
|
||||
"message": "Ikon {name}"
|
||||
},
|
||||
@@ -350,6 +365,15 @@
|
||||
"analytics.stat.views": {
|
||||
"message": "Tontonan"
|
||||
},
|
||||
"analytics.table.duration.days": {
|
||||
"message": "{count, plural, other {# hari}}"
|
||||
},
|
||||
"analytics.table.duration.hours": {
|
||||
"message": "{count, plural, other {# jam}}"
|
||||
},
|
||||
"analytics.table.duration.minutes": {
|
||||
"message": "{count, plural, other {# minit}}"
|
||||
},
|
||||
"analytics.table.export-csv": {
|
||||
"message": "Eksport CSV"
|
||||
},
|
||||
@@ -887,6 +911,9 @@
|
||||
"create-project-version.create-modal.stage.add-files.admonition": {
|
||||
"message": "Fail tambahan adalah untuk sumber sokongan seperti kod sumber, bukan untuk versi atau varian alternatif."
|
||||
},
|
||||
"create.collection.collection-info": {
|
||||
"message": "Koleksi baharu anda akan dibuat sebagai koleksi awam dengan {count, plural, =0 {0 projek} other {# projek}}."
|
||||
},
|
||||
"create.collection.create-collection": {
|
||||
"message": "Cipta koleksi"
|
||||
},
|
||||
@@ -1046,6 +1073,9 @@
|
||||
"dashboard.affiliate-links.search": {
|
||||
"message": "Cari pautan afiliasi..."
|
||||
},
|
||||
"dashboard.analytics.from-projects": {
|
||||
"message": "daripada {count} {count, plural, other {projek}}"
|
||||
},
|
||||
"dashboard.analytics.total-downloads": {
|
||||
"message": "Jumlah muat turun"
|
||||
},
|
||||
@@ -1067,6 +1097,9 @@
|
||||
"dashboard.collections.empty.no-match-hint": {
|
||||
"message": "Cuba laraskan penapis atau istilah carian anda."
|
||||
},
|
||||
"dashboard.collections.label.projects-count": {
|
||||
"message": "{count} {countPlural, plural, other {projek}}"
|
||||
},
|
||||
"dashboard.collections.label.search-input": {
|
||||
"message": "Cari koleksi anda"
|
||||
},
|
||||
@@ -1349,6 +1382,9 @@
|
||||
"dashboard.notifications.link.view-history": {
|
||||
"message": "Lihat sejarah pemberitahuan"
|
||||
},
|
||||
"dashboard.notifications.link.view-more": {
|
||||
"message": "Lihat {extraNotifs} lagi {extraNotifs, plural, other {pemberitahuan}}"
|
||||
},
|
||||
"dashboard.organizations.button.create": {
|
||||
"message": "Cipta organisasi"
|
||||
},
|
||||
@@ -1394,6 +1430,9 @@
|
||||
"dashboard.projects.links.button.edit": {
|
||||
"message": "Sunting pautan"
|
||||
},
|
||||
"dashboard.projects.links.changes-applied": {
|
||||
"message": "Perubahan akan diterapkan kepada <strong>{count}</strong> {count, plural, other {projek}}."
|
||||
},
|
||||
"dashboard.projects.links.description": {
|
||||
"message": "Sebarang pautan yang anda nyatakan di bawah akan ditulis ganti pada setiap projek yang dipilih. Sebarang pautan yang anda biarkan kosong akan diabaikan. Anda boleh memadamkan pautan daripada semua projek yang dipilih menggunakan butang tong sampah."
|
||||
},
|
||||
@@ -2672,6 +2711,9 @@
|
||||
"muralpay.warning.wallet-address": {
|
||||
"message": "Semak semula alamat dompet anda. Dana yang dihantar ke alamat yang salah tidak boleh dipulihkan."
|
||||
},
|
||||
"organization.settings.projects.edit-links.affected-projects": {
|
||||
"message": "Pemasangan akan diterapkan kepada {count, plural, other {# projek}}."
|
||||
},
|
||||
"profile.bio.fallback.creator": {
|
||||
"message": "Seorang pencipta Modrinth."
|
||||
},
|
||||
@@ -2696,6 +2738,9 @@
|
||||
"profile.button.set-affiliate": {
|
||||
"message": "Tetapkan sebagai rakan afiliasi"
|
||||
},
|
||||
"profile.collection.projects-count": {
|
||||
"message": "{count, plural, other {# projek}}"
|
||||
},
|
||||
"profile.details.label.auth-providers": {
|
||||
"message": "Penyedia pengesahan"
|
||||
},
|
||||
@@ -2732,6 +2777,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Koleksi"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, other {muat turun}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Telah menyertai"
|
||||
},
|
||||
@@ -2750,6 +2798,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Organisasi"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, other {projek}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Sedang menyimpan..."
|
||||
},
|
||||
@@ -2762,6 +2813,9 @@
|
||||
"profile.official-account.bio": {
|
||||
"message": "Akaun pengguna rasmi Modrinth. Dapatkan sokongan di <support-link></support-link> atau melalui e-mel di <email></email>"
|
||||
},
|
||||
"profile.stats.projects-followers": {
|
||||
"message": "{count, plural, other {<stat>{count}</stat> pengikut projek}}"
|
||||
},
|
||||
"profile.user-id": {
|
||||
"message": "ID Pengguna: {id}"
|
||||
},
|
||||
@@ -3089,9 +3143,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "Jika anda memerlukan bantuan atau mempunyai pertanyaan tambahan, sila lawati <help-center-link>Pusat Bantuan Modrinth</help-center-link> dan klik gelembung biru untuk menghubungi sokongan."
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "Tunjukkan antara muka ahli"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "Ini adalah bebenang perbualan peribadi dengan penyederhana Modrinth. Mereka mungkin akan menghantar mesej kepada anda tentang isu-isu berkaitan projek ini."
|
||||
},
|
||||
@@ -3197,20 +3248,29 @@
|
||||
"project.settings.permissions.learn-more": {
|
||||
"message": "Ketahui lebih lanjut"
|
||||
},
|
||||
"project.settings.permissions.search-placeholder": {
|
||||
"message": "Cari {count} {count, plural, other {projek luaran}}..."
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Tetapan"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Kunjungi papan pemuka projek"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count, plural, other {muat turun}}"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} telah diarkibkan. {title} tidak akan menerima sebarang kemas kini lanjut melainkan pengarang memutuskan untuk menyaharkibkan projek."
|
||||
},
|
||||
"project.versions.title": {
|
||||
"message": "Versi"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "Selesaikan"
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, other {Versi ini}} kini ditahan dan tidak disenaraikan secara umum. Sila berikan bukti bahawa anda mempunyai kebenaran untuk mengedarkan semula fail tertentu yang disertakan dalam {count, plural, other {versi}} pek mod ini."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, other {Versi}} telah ditahan kerana kandungan terbenam yang tidak diketahui"
|
||||
},
|
||||
"report.already-reported": {
|
||||
"message": "Anda telah melaporkan {title}"
|
||||
|
||||
@@ -8,6 +8,366 @@
|
||||
"admin.billing.error.not-found": {
|
||||
"message": "Gebruiker niet gevonden"
|
||||
},
|
||||
"analytics.action.add": {
|
||||
"message": "Toevoegen"
|
||||
},
|
||||
"analytics.action.cancel": {
|
||||
"message": "Annuleren"
|
||||
},
|
||||
"analytics.action.refresh": {
|
||||
"message": "Ververs"
|
||||
},
|
||||
"analytics.action.reset": {
|
||||
"message": "Herstel"
|
||||
},
|
||||
"analytics.breakdown.country": {
|
||||
"message": "Land"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "Download reden"
|
||||
},
|
||||
"analytics.breakdown.download-source": {
|
||||
"message": "Download bron"
|
||||
},
|
||||
"analytics.breakdown.game-version": {
|
||||
"message": "Spel versie"
|
||||
},
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "Lader"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "Monetisatie"
|
||||
},
|
||||
"analytics.breakdown.project": {
|
||||
"message": "Project"
|
||||
},
|
||||
"analytics.breakdown.project-status": {
|
||||
"message": "Project status"
|
||||
},
|
||||
"analytics.breakdown.project-version": {
|
||||
"message": "Project versie"
|
||||
},
|
||||
"analytics.chart.action.show-all": {
|
||||
"message": "Allemaal laten zien"
|
||||
},
|
||||
"analytics.chart.action.show-top-eight": {
|
||||
"message": "Laat de top 8 zien"
|
||||
},
|
||||
"analytics.chart.axis.playtime-hours": {
|
||||
"message": "{hours} h"
|
||||
},
|
||||
"analytics.chart.controls.active-count": {
|
||||
"message": "{count} actief"
|
||||
},
|
||||
"analytics.chart.controls.annotations": {
|
||||
"message": "Annotatie"
|
||||
},
|
||||
"analytics.chart.controls.display": {
|
||||
"message": "Weergave"
|
||||
},
|
||||
"analytics.chart.controls.modrinth-events": {
|
||||
"message": "Modrinth evenementen"
|
||||
},
|
||||
"analytics.chart.controls.no-modrinth-events": {
|
||||
"message": "Geen Modrinth evenementen in de grafiek."
|
||||
},
|
||||
"analytics.chart.controls.no-project-events": {
|
||||
"message": "Geen project evenementen in de grafiek."
|
||||
},
|
||||
"analytics.chart.controls.previous-period": {
|
||||
"message": "Vorige periode"
|
||||
},
|
||||
"analytics.chart.controls.project-events": {
|
||||
"message": "Project evenementen"
|
||||
},
|
||||
"analytics.chart.controls.ratio": {
|
||||
"message": "Percentage"
|
||||
},
|
||||
"analytics.chart.empty.select-table-items": {
|
||||
"message": "Selecteer een element uit de tabel beneden om jouw data te visualiseren."
|
||||
},
|
||||
"analytics.chart.events.project-title": {
|
||||
"message": "<project>{projectName}</project>: {title}"
|
||||
},
|
||||
"analytics.chart.events.see-announcement": {
|
||||
"message": "Zie aankondiging"
|
||||
},
|
||||
"analytics.chart.render-limit.description": {
|
||||
"message": "Het laten zien van alle lijnen in de grafiek kan de pagina slomer maken."
|
||||
},
|
||||
"analytics.chart.render-limit.header": {
|
||||
"message": "Alle {count} punten in de grafiek laten zien?"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# dag} other {# dagen}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.hours": {
|
||||
"message": "{count, plural, one {# uur} other {# uren}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.minutes": {
|
||||
"message": "{count, plural, one {# minuut} other {# minuten}}"
|
||||
},
|
||||
"analytics.chart.tooltip.hide-entry": {
|
||||
"message": "Verberg {name} in de grafiek"
|
||||
},
|
||||
"analytics.chart.tooltip.pinned": {
|
||||
"message": "Grafiek tooltip vastgepind"
|
||||
},
|
||||
"analytics.chart.tooltip.pinned-aria": {
|
||||
"message": "Vastgepind"
|
||||
},
|
||||
"analytics.chart.tooltip.show-entry": {
|
||||
"message": "Laat {name} in de grafiek zien"
|
||||
},
|
||||
"analytics.chart.tooltip.total": {
|
||||
"message": "Totaal"
|
||||
},
|
||||
"analytics.chart.view.area": {
|
||||
"message": "Vlak"
|
||||
},
|
||||
"analytics.chart.view.bar": {
|
||||
"message": "Staaf"
|
||||
},
|
||||
"analytics.chart.view.line": {
|
||||
"message": "Lijn"
|
||||
},
|
||||
"analytics.download-reason.modpack": {
|
||||
"message": "Modpack"
|
||||
},
|
||||
"analytics.download-reason.standalone": {
|
||||
"message": "Direct"
|
||||
},
|
||||
"analytics.download-reason.update": {
|
||||
"message": "Update"
|
||||
},
|
||||
"analytics.download-source.app": {
|
||||
"message": "Modrinth App"
|
||||
},
|
||||
"analytics.download-source.website": {
|
||||
"message": "Modrinth Website"
|
||||
},
|
||||
"analytics.downloads.suffix": {
|
||||
"message": "installaties"
|
||||
},
|
||||
"analytics.empty.no-data": {
|
||||
"message": "Geen data beschikbaar"
|
||||
},
|
||||
"analytics.empty.no-data-for-analytics": {
|
||||
"message": "Geen data beschikbaar voor analyse"
|
||||
},
|
||||
"analytics.empty.no-projects": {
|
||||
"message": "Geen projecten beschikbaar"
|
||||
},
|
||||
"analytics.empty.no-projects-for-analytics": {
|
||||
"message": "Geen projecten beschikbaar voor analyse"
|
||||
},
|
||||
"analytics.filter.game-version-type": {
|
||||
"message": "Game versie typen"
|
||||
},
|
||||
"analytics.filter.game-version-type.all": {
|
||||
"message": "Allemaal"
|
||||
},
|
||||
"analytics.filter.game-version-type.release": {
|
||||
"message": "Uitgaves"
|
||||
},
|
||||
"analytics.filter.search.countries": {
|
||||
"message": "Zoek landen..."
|
||||
},
|
||||
"analytics.filter.search.download-sources": {
|
||||
"message": "Zoek download bron..."
|
||||
},
|
||||
"analytics.filter.search.project-versions": {
|
||||
"message": "Zoek project versies..."
|
||||
},
|
||||
"analytics.filter.search.versions": {
|
||||
"message": "Zoek versies"
|
||||
},
|
||||
"analytics.graph.title.downloads": {
|
||||
"message": "Downloads Over Tijd"
|
||||
},
|
||||
"analytics.graph.title.playtime": {
|
||||
"message": "Speeltijd Over Tijd"
|
||||
},
|
||||
"analytics.graph.title.revenue": {
|
||||
"message": "Inkomsten Over Tijd"
|
||||
},
|
||||
"analytics.group-by.1h": {
|
||||
"message": "1h"
|
||||
},
|
||||
"analytics.group-by.6h": {
|
||||
"message": "6h"
|
||||
},
|
||||
"analytics.group-by.date": {
|
||||
"message": "Datum"
|
||||
},
|
||||
"analytics.group-by.day": {
|
||||
"message": "Dag"
|
||||
},
|
||||
"analytics.group-by.month": {
|
||||
"message": "Maand"
|
||||
},
|
||||
"analytics.group-by.selected.day": {
|
||||
"message": "Sorteer per dag"
|
||||
},
|
||||
"analytics.group-by.selected.hour": {
|
||||
"message": "Sorteer per uur"
|
||||
},
|
||||
"analytics.group-by.selected.month": {
|
||||
"message": "Sorteer per maand"
|
||||
},
|
||||
"analytics.group-by.selected.six-hours": {
|
||||
"message": "Sorteer per 6 uur"
|
||||
},
|
||||
"analytics.group-by.selected.week": {
|
||||
"message": "Sorteer per week"
|
||||
},
|
||||
"analytics.group-by.selected.year": {
|
||||
"message": "Sorteer per jaar"
|
||||
},
|
||||
"analytics.group-by.week": {
|
||||
"message": "Week"
|
||||
},
|
||||
"analytics.group-by.year": {
|
||||
"message": "Jaar"
|
||||
},
|
||||
"analytics.loading.fetching-results": {
|
||||
"message": "Resultaten ophalen..."
|
||||
},
|
||||
"analytics.options.loading": {
|
||||
"message": "Laden..."
|
||||
},
|
||||
"analytics.project-event.project-approved": {
|
||||
"message": "Project goedgekeurd"
|
||||
},
|
||||
"analytics.project-event.project-private": {
|
||||
"message": "Project privé gemaakt"
|
||||
},
|
||||
"analytics.project-event.project-status-changed": {
|
||||
"message": "Project status veranderd"
|
||||
},
|
||||
"analytics.project-event.project-unlisted": {
|
||||
"message": "Project verborgen"
|
||||
},
|
||||
"analytics.project-event.version-released": {
|
||||
"message": "{version} gelanceerd"
|
||||
},
|
||||
"analytics.project-event.version-uploaded": {
|
||||
"message": "Versie geüpdate"
|
||||
},
|
||||
"analytics.project-status.approved": {
|
||||
"message": "Goedgekeurd"
|
||||
},
|
||||
"analytics.project-status.archived": {
|
||||
"message": "Gearchiveerd"
|
||||
},
|
||||
"analytics.project-status.draft": {
|
||||
"message": "Concept"
|
||||
},
|
||||
"analytics.project-status.other": {
|
||||
"message": "Ander"
|
||||
},
|
||||
"analytics.project-status.private": {
|
||||
"message": "Privé"
|
||||
},
|
||||
"analytics.project-status.rejected": {
|
||||
"message": "Afgekeurd"
|
||||
},
|
||||
"analytics.project-status.unlisted": {
|
||||
"message": "Verborgen"
|
||||
},
|
||||
"analytics.project.all": {
|
||||
"message": "Alle projecten"
|
||||
},
|
||||
"analytics.project.count": {
|
||||
"message": "{count, plural, one {# project} other {# projecten}}"
|
||||
},
|
||||
"analytics.project.icon-alt": {
|
||||
"message": "{name} Icoon"
|
||||
},
|
||||
"analytics.project.select": {
|
||||
"message": "Selecteer projecten"
|
||||
},
|
||||
"analytics.project.user": {
|
||||
"message": "{username} zijn projecten"
|
||||
},
|
||||
"analytics.project.your": {
|
||||
"message": "Jouw projecten"
|
||||
},
|
||||
"analytics.query.filter.add": {
|
||||
"message": "Filter toevoegen"
|
||||
},
|
||||
"analytics.query.label.grouped-by": {
|
||||
"message": "Groepeer per"
|
||||
},
|
||||
"analytics.query.label.project": {
|
||||
"message": "Project:"
|
||||
},
|
||||
"analytics.query.label.timeframe": {
|
||||
"message": "Tijdsframe:"
|
||||
},
|
||||
"analytics.stat.downloads": {
|
||||
"message": "Installaties"
|
||||
},
|
||||
"analytics.stat.monetization-banner.learn-more": {
|
||||
"message": "Meer informatie"
|
||||
},
|
||||
"analytics.stat.monetization-banner.title": {
|
||||
"message": "Hoe werkt monetisatie?"
|
||||
},
|
||||
"analytics.stat.playtime": {
|
||||
"message": "Speeltijd"
|
||||
},
|
||||
"analytics.stat.playtime-hours": {
|
||||
"message": "{hours} uur"
|
||||
},
|
||||
"analytics.stat.revenue": {
|
||||
"message": "Inkomsten"
|
||||
},
|
||||
"analytics.stat.revenue-value": {
|
||||
"message": "${value}"
|
||||
},
|
||||
"analytics.stat.unavailable": {
|
||||
"message": "n.v.t."
|
||||
},
|
||||
"analytics.table.csv.date-range": {
|
||||
"message": "{start} tot {end}"
|
||||
},
|
||||
"analytics.table.csv.header.playtime-seconds": {
|
||||
"message": "Speeltijd (seconden)"
|
||||
},
|
||||
"analytics.table.empty.no-matching-rows": {
|
||||
"message": "Geen passende gegevens"
|
||||
},
|
||||
"analytics.table.export-csv": {
|
||||
"message": "Exporteer naar CSV"
|
||||
},
|
||||
"analytics.table.export.cumulative": {
|
||||
"message": "Cumulatief"
|
||||
},
|
||||
"analytics.table.export.grouped": {
|
||||
"message": "Gegroepeerd op {groupBy}"
|
||||
},
|
||||
"analytics.table.pagination.summary": {
|
||||
"message": "Laat {start} t/m {end} van de {total} resultaten zien"
|
||||
},
|
||||
"analytics.table.search.placeholder": {
|
||||
"message": "Zoek..."
|
||||
},
|
||||
"analytics.threshold.countries-above": {
|
||||
"message": "Landen boven"
|
||||
},
|
||||
"analytics.threshold.country-downloads-aria": {
|
||||
"message": "Land download limiet"
|
||||
},
|
||||
"analytics.threshold.projects-above": {
|
||||
"message": "Projecten boven"
|
||||
},
|
||||
"analytics.title": {
|
||||
"message": "Analytica"
|
||||
},
|
||||
"analytics.value.unknown": {
|
||||
"message": "Onbekend"
|
||||
},
|
||||
"app-marketing.download.description": {
|
||||
"message": "Ons bureaublad app is overal verkrijgbaar, kies de gewenste versie."
|
||||
},
|
||||
@@ -122,6 +482,9 @@
|
||||
"app-marketing.features.performance.infinite-mb": {
|
||||
"message": "∞ MB"
|
||||
},
|
||||
"app-marketing.features.performance.infinite-times-infinite-mb": {
|
||||
"message": "∞ × ∞ MB"
|
||||
},
|
||||
"app-marketing.features.performance.less-than-150mb": {
|
||||
"message": "< 150 MB"
|
||||
},
|
||||
@@ -162,13 +525,13 @@
|
||||
"message": "Deel modpacks"
|
||||
},
|
||||
"app-marketing.features.unlike-any-launcher": {
|
||||
"message": "Onvergelijkbaar met de concurrentie "
|
||||
"message": "Onvergelijkbaar met de concurrentie"
|
||||
},
|
||||
"app-marketing.features.website.description": {
|
||||
"message": "Modrinth App is volledig geïntegreerd met de website, zodat u vanuit de app toegang heeft tot al uw favoriete projecten!"
|
||||
},
|
||||
"app-marketing.features.website.title": {
|
||||
"message": "Website integratie "
|
||||
"message": "Website integratie"
|
||||
},
|
||||
"app-marketing.features.youve-used-before": {
|
||||
"message": "je hebt het al gezien"
|
||||
@@ -398,12 +761,114 @@
|
||||
"collection.title": {
|
||||
"message": "{name} - Collectie"
|
||||
},
|
||||
"conversation-thread.action.add-private-note": {
|
||||
"message": "Voeg privé notatie toe"
|
||||
},
|
||||
"conversation-thread.action.approve": {
|
||||
"message": "Accepteren"
|
||||
},
|
||||
"conversation-thread.action.approve-with-reply": {
|
||||
"message": "Accepteren met antwoord"
|
||||
},
|
||||
"conversation-thread.action.close-thread": {
|
||||
"message": "Sluit thread"
|
||||
},
|
||||
"conversation-thread.action.close-with-reply": {
|
||||
"message": "Sluit met antwoord"
|
||||
},
|
||||
"conversation-thread.action.reject": {
|
||||
"message": "Afkeuren"
|
||||
},
|
||||
"conversation-thread.action.reject-with-reply": {
|
||||
"message": "Afkeuren met antwoord"
|
||||
},
|
||||
"conversation-thread.action.reopen-thread": {
|
||||
"message": "Heropen thread"
|
||||
},
|
||||
"conversation-thread.action.reply": {
|
||||
"message": "Beantwoorden"
|
||||
},
|
||||
"conversation-thread.action.reply-to-thread": {
|
||||
"message": "Beantwoord thread"
|
||||
},
|
||||
"conversation-thread.action.resubmit-for-review": {
|
||||
"message": "Heropsturen voor beoordeling"
|
||||
},
|
||||
"conversation-thread.action.resubmit-for-review-with-reply": {
|
||||
"message": "Heropsturen voor beoordeling met antwoord"
|
||||
},
|
||||
"conversation-thread.action.send": {
|
||||
"message": "Versturen"
|
||||
},
|
||||
"conversation-thread.action.send-to-review": {
|
||||
"message": "Versturen naar beoordelingen"
|
||||
},
|
||||
"conversation-thread.action.send-to-review-with-reply": {
|
||||
"message": "Versturen naar beoordelingen met antwoord"
|
||||
},
|
||||
"conversation-thread.action.set-to-draft": {
|
||||
"message": "Wijzig naar concept"
|
||||
},
|
||||
"conversation-thread.action.set-to-draft-with-reply": {
|
||||
"message": "Wijzig naar concept met antwoord"
|
||||
},
|
||||
"conversation-thread.action.withhold": {
|
||||
"message": "Terughouden"
|
||||
},
|
||||
"conversation-thread.action.withhold-with-reply": {
|
||||
"message": "Terughouden met antwoord"
|
||||
},
|
||||
"conversation-thread.closed-thread.description": {
|
||||
"message": "Deze thread is gesloten en kan geen nieuwe berichten meer ontvangen."
|
||||
},
|
||||
"conversation-thread.error.closing-report": {
|
||||
"message": "Fout tijdens het sluiten van rapport"
|
||||
},
|
||||
"conversation-thread.error.reopening-report": {
|
||||
"message": "Fout tijdens het heropenen van rapport"
|
||||
},
|
||||
"conversation-thread.error.sending-message": {
|
||||
"message": "Fout tijdens het versturen van bericht"
|
||||
},
|
||||
"conversation-thread.reply-editor.placeholder.reply": {
|
||||
"message": "Reageer op het thread..."
|
||||
},
|
||||
"conversation-thread.reply-editor.placeholder.send": {
|
||||
"message": "Verstuur een bericht..."
|
||||
},
|
||||
"conversation-thread.reply-modal.confirmation.description": {
|
||||
"message": "Conformeer dat moderators hier niet actief naar kijken"
|
||||
},
|
||||
"conversation-thread.reply-modal.confirmation.label": {
|
||||
"message": "Ik erken dat de moderators deze thread niet actief monitoren."
|
||||
},
|
||||
"conversation-thread.reply-modal.description": {
|
||||
"message": "Je project is al goedgekeurd. Daarom houdt het moderatieteam deze thread niet actief in de gaten. Mocht er echter een probleem met je project zijn, dan kunnen zij je bericht wel zien."
|
||||
},
|
||||
"conversation-thread.reply-modal.header": {
|
||||
"message": "Reageer op thread"
|
||||
},
|
||||
"conversation-thread.reply-modal.help-center-note": {
|
||||
"message": "Als je contact wilt opnemen met het moderatorteam, ga dan naar het <help-center-link>Modrinth Helpcentrum</help-center-link> en klik op het blauwe ballonnetje rechtsonder om contact op te nemen met de ondersteuning."
|
||||
},
|
||||
"conversation-thread.resubmit-modal.confirmation.description": {
|
||||
"message": "Conformeer dat ik de opmerking van de moderator heb geadresseerd"
|
||||
},
|
||||
"conversation-thread.resubmit-modal.confirmation.label": {
|
||||
"message": "Ik conformeer dat ik de opmerking van de moderator heb geadresseerd."
|
||||
},
|
||||
"conversation-thread.resubmit-modal.description": {
|
||||
"message": "Je verstuurd <project-title>{projectTitle}</project-title> om opnieuw door de moderators gereviewd te laten worden."
|
||||
},
|
||||
"conversation-thread.resubmit-modal.header.resubmitting": {
|
||||
"message": "Heropsturen voor beoordeling"
|
||||
},
|
||||
"conversation-thread.resubmit-modal.header.submitting": {
|
||||
"message": "Versuur voor beoordeling"
|
||||
},
|
||||
"conversation-thread.resubmit-modal.reminder": {
|
||||
"message": "Zorg ervoor dat je alle opmerkingen van het moderatie team verwerkt hebt."
|
||||
},
|
||||
"conversation-thread.resubmit-modal.warning": {
|
||||
"message": "Herhaaldelijk berichten plaatsen zonder in te gaan op de opmerkingen van de moderators kan leiden tot een opschorting van je account."
|
||||
},
|
||||
@@ -446,6 +911,9 @@
|
||||
"create.limit-alert.limit-reached": {
|
||||
"message": "{type} limiet bereikt"
|
||||
},
|
||||
"create.limit-alert.limit-reached-description": {
|
||||
"message": "Je hebt het {type} limiet bereikt. Neem contact op met support om je limiet te verhogen."
|
||||
},
|
||||
"create.limit-alert.type-collection": {
|
||||
"message": "Collectie"
|
||||
},
|
||||
@@ -546,7 +1014,7 @@
|
||||
"message": "Publiek"
|
||||
},
|
||||
"create.project.visibility-unlisted": {
|
||||
"message": "Niet vermeld"
|
||||
"message": "Verborgen"
|
||||
},
|
||||
"dashboard.affiliate-links.create.button": {
|
||||
"message": "Maak een affiliate-link"
|
||||
@@ -572,6 +1040,12 @@
|
||||
"dashboard.analytics.from-projects": {
|
||||
"message": "van {count} {count, plural, one {project} other {projects}}"
|
||||
},
|
||||
"dashboard.analytics.total-downloads": {
|
||||
"message": "Totale downoads"
|
||||
},
|
||||
"dashboard.analytics.total-followers": {
|
||||
"message": "Totale volgers"
|
||||
},
|
||||
"dashboard.collections.button.create-new": {
|
||||
"message": "Maak nieuwe"
|
||||
},
|
||||
@@ -596,6 +1070,18 @@
|
||||
"dashboard.collections.long-title": {
|
||||
"message": "Je collecties"
|
||||
},
|
||||
"dashboard.collections.placeholder.search": {
|
||||
"message": "Zoek naar collecties..."
|
||||
},
|
||||
"dashboard.collections.sort.name-ascending": {
|
||||
"message": "Naam (A-Z)"
|
||||
},
|
||||
"dashboard.collections.sort.recently-created": {
|
||||
"message": "Recentelijk gemaakt"
|
||||
},
|
||||
"dashboard.collections.sort.recently-updated": {
|
||||
"message": "Recentelijk geüpdate"
|
||||
},
|
||||
"dashboard.creator-tax-form-modal.confirmation.download-button": {
|
||||
"message": "Download {formType}"
|
||||
},
|
||||
@@ -848,18 +1334,138 @@
|
||||
"dashboard.creator-withdraw-modal.withdraw-limit-used": {
|
||||
"message": "Je hebt je opnamelimiet <b>{withdrawLimit}</b> bereikt. Je moet een belastingformulier invullen om meer geld op te nemen."
|
||||
},
|
||||
"dashboard.discord-roles.banner.cta": {
|
||||
"message": "Verbind Discord"
|
||||
},
|
||||
"dashboard.discord-roles.banner.title": {
|
||||
"message": "Claim uw Discord rollen"
|
||||
},
|
||||
"dashboard.discord-roles.role.big-creator": {
|
||||
"message": "1M+ Downloads"
|
||||
},
|
||||
"dashboard.discord-roles.role.creator": {
|
||||
"message": "Maaker"
|
||||
},
|
||||
"dashboard.discord-roles.role.pride": {
|
||||
"message": "Pride 2026"
|
||||
},
|
||||
"dashboard.head-title": {
|
||||
"message": "Dashboard"
|
||||
},
|
||||
"dashboard.notifications.empty.no-unread": {
|
||||
"message": "U heeft geen ongelezen notificaties."
|
||||
},
|
||||
"dashboard.notifications.link.see-all": {
|
||||
"message": "Allemaal bekijken"
|
||||
},
|
||||
"dashboard.notifications.link.view-history": {
|
||||
"message": "Zie notificatie geschiedenis"
|
||||
},
|
||||
"dashboard.notifications.link.view-more": {
|
||||
"message": "Bekijk {extraNotifs} meer {extraNotifs, plural, one {notification} other {notifications}}"
|
||||
},
|
||||
"dashboard.organizations.button.create": {
|
||||
"message": "Creëer organisatie"
|
||||
},
|
||||
"dashboard.organizations.empty.cta": {
|
||||
"message": "Maak een organisatie!"
|
||||
},
|
||||
"dashboard.organizations.error.fetch": {
|
||||
"message": "Organisaties niet op kunnen halen"
|
||||
},
|
||||
"dashboard.organizations.member-count": {
|
||||
"message": "{count} {count, plural, one {member} other {members}}"
|
||||
},
|
||||
"dashboard.organizations.title": {
|
||||
"message": "Organisaties"
|
||||
},
|
||||
"dashboard.overview.notifications.button.mark-all-as-read": {
|
||||
"message": "Markeer allemaal als gelezen"
|
||||
},
|
||||
"dashboard.overview.notifications.button.view-history": {
|
||||
"message": "Geschiedenis bekijken"
|
||||
},
|
||||
"dashboard.overview.notifications.empty.no-unread": {
|
||||
"message": "U heeft geen ongelezen notificaties."
|
||||
},
|
||||
"dashboard.overview.notifications.error.loading": {
|
||||
"message": "Fout tijdens het laden van de notificaties:"
|
||||
},
|
||||
"dashboard.overview.notifications.history.label": {
|
||||
"message": "Geschiedenis"
|
||||
},
|
||||
"dashboard.overview.notifications.history.title": {
|
||||
"message": "Notificatie geschiedenis"
|
||||
},
|
||||
"dashboard.overview.notifications.loading": {
|
||||
"message": "Notificaties aan het laden..."
|
||||
},
|
||||
"dashboard.projects.bulk-edit-hint": {
|
||||
"message": "U kunt meerdere projecten tegelijkertijd bijwerken door ze hieronder te selecteren."
|
||||
},
|
||||
"dashboard.projects.bulk-edit.server-disabled": {
|
||||
"message": "Massa wijzigingen worden niet ondersteund door server projecten"
|
||||
},
|
||||
"dashboard.projects.empty": {
|
||||
"message": "U heeft nog geen projecten. Klik de groene knop hierboven om te beginnen."
|
||||
},
|
||||
"dashboard.projects.head-title": {
|
||||
"message": "Projecten"
|
||||
},
|
||||
"dashboard.projects.links.and-more": {
|
||||
"message": "en nog {count} anderen..."
|
||||
},
|
||||
"dashboard.projects.links.button.clear-link": {
|
||||
"message": "Leeg link"
|
||||
},
|
||||
"dashboard.projects.links.button.edit": {
|
||||
"message": "Wijzig link"
|
||||
},
|
||||
"dashboard.projects.links.changes-applied": {
|
||||
"message": "De wijzigingen worden toegepast op <strong>{count}</strong> {count, plural, one {project} other {projects}}."
|
||||
},
|
||||
"dashboard.projects.links.description": {
|
||||
"message": "Alle links die u hieronder opgeeft, worden in elk van de geselecteerde projecten overschreven. Links die u leeg laat, worden genegeerd. U kunt een link uit alle geselecteerde projecten verwijderen met de prullenbakknop."
|
||||
},
|
||||
"dashboard.projects.links.discord-invite.description": {
|
||||
"message": "Een uitnodigingslink naar jouw Discord server."
|
||||
},
|
||||
"dashboard.projects.links.discord-invite.label": {
|
||||
"message": "Discord uitnodiging"
|
||||
},
|
||||
"dashboard.projects.links.header.edit": {
|
||||
"message": "Wijzig linken"
|
||||
},
|
||||
"dashboard.projects.links.source-code.label": {
|
||||
"message": "Broncode"
|
||||
},
|
||||
"dashboard.projects.links.wiki-page.label": {
|
||||
"message": "Wiki pagina"
|
||||
},
|
||||
"dashboard.projects.notification.bulk-edit-success": {
|
||||
"message": "Alle links van de geselecteerde projecten zijn geüpdate."
|
||||
},
|
||||
"dashboard.projects.project.icon-alt": {
|
||||
"message": "Icoon voor {title}"
|
||||
},
|
||||
"dashboard.projects.project.moderator-message-aria": {
|
||||
"message": "Dit project heeft een bericht van de moderators. Bekijk het project voor meer informatie."
|
||||
},
|
||||
"dashboard.projects.project.review-environment-metadata": {
|
||||
"message": "Controller project metadata alstublieft"
|
||||
},
|
||||
"dashboard.projects.sort.option.name": {
|
||||
"message": "Naam"
|
||||
},
|
||||
"dashboard.projects.sort.option.status": {
|
||||
"message": "Status"
|
||||
},
|
||||
"dashboard.projects.table.name": {
|
||||
"message": "Naam"
|
||||
},
|
||||
"dashboard.projects.table.status": {
|
||||
"message": "Status"
|
||||
},
|
||||
"dashboard.revenue.available-now": {
|
||||
"message": "Nu beschikbaar"
|
||||
},
|
||||
@@ -1329,7 +1935,7 @@
|
||||
"message": "Krijg gedetailleerde overzichten over paginaweergaven, aantal downloads en inkomsten"
|
||||
},
|
||||
"landing.creator.feature.data-statistics.title": {
|
||||
"message": "Cijfers en Statistieken "
|
||||
"message": "Cijfers en Statistieken"
|
||||
},
|
||||
"landing.creator.feature.discovery.description": {
|
||||
"message": "Word ontdekt door duizenden gebruikers door middel van zoekresultaten, onze startpagina, Discord server, en nog veel meer mogelijkheden in de toekomst!"
|
||||
@@ -1347,7 +1953,7 @@
|
||||
"message": "Krijg advertentie geld van jouw project paginas, en neem je winst op elk moment op."
|
||||
},
|
||||
"landing.creator.feature.monetization.title": {
|
||||
"message": "Maak jouw projecten te gelden"
|
||||
"message": "Monetisatie"
|
||||
},
|
||||
"landing.creator.feature.team-management.description": {
|
||||
"message": "Nodig je teamleden uit en beheer rollen en machtigingen eenvoudig"
|
||||
@@ -2327,6 +2933,15 @@
|
||||
"project.license.title": {
|
||||
"message": "Licentie"
|
||||
},
|
||||
"project.moderation.admonition.approved.body.unlisted": {
|
||||
"message": "Jouw project is verborgen. Dit betekend dat het alleen beschikbaar is via een directe link en niet vindbaar is op Modrinth."
|
||||
},
|
||||
"project.moderation.admonition.withheld.body": {
|
||||
"message": "Jouw project wordt niet publiek weergegeven en kan alleen benaderd worden via een directe link. {requestedStatus, select, unlisted { Gebaseerd op jouw geselecteerde <visibility-settings-link>zichtbaarheidsinstelling</visibility-settings-link> hoeft u waarschijnlijk geen verdere actie te ondernemen.} other { Verbeter alstublieft alle gekregen punten en de hieronder genoteerde problemen voordat u dit project opnieuw inzend.}}"
|
||||
},
|
||||
"project.moderation.admonition.withheld.header": {
|
||||
"message": "Verborgen door moderator"
|
||||
},
|
||||
"project.moderation.title": {
|
||||
"message": "Moderatie"
|
||||
},
|
||||
@@ -2394,7 +3009,7 @@
|
||||
"message": "Instellingen"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Bezoek dashboard van het project"
|
||||
"message": "Bezoek het project dashboard"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} is gearchiveerd. {title} zal geen verdere updates krijgen tenzij de auteur het project de-archiveerd."
|
||||
|
||||
@@ -23,6 +23,15 @@
|
||||
"analytics.breakdown.country": {
|
||||
"message": "Kraj"
|
||||
},
|
||||
"analytics.breakdown.dependent-on": {
|
||||
"message": "Wymaga"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-download": {
|
||||
"message": "Wymagany projekt"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-type": {
|
||||
"message": "Rodzaj wymaganego projektu"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "Powód pobrania"
|
||||
},
|
||||
@@ -38,6 +47,9 @@
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "Loader"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "Członek"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "Monetyzacja"
|
||||
},
|
||||
@@ -107,15 +119,24 @@
|
||||
"analytics.chart.empty.select-table-items": {
|
||||
"message": "Wybierz coś w tabeli poniżej, by wizualizować dane."
|
||||
},
|
||||
"analytics.chart.events.count-aria": {
|
||||
"message": "{count, plural, one {# wydarzenie analityczne} few {# wydarzenia analityczne} other {# wydarzeń analitycznych}}"
|
||||
},
|
||||
"analytics.chart.events.project-title": {
|
||||
"message": "<project>{projectName}</project>: {title}"
|
||||
},
|
||||
"analytics.chart.events.see-announcement": {
|
||||
"message": "Pokaż ogłoszenie"
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.aria": {
|
||||
"message": "Pokaż szczegóły analityki monetyzacji"
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.description": {
|
||||
"message": "Tylko wyświetlenia i pobrania z Modrinth liczą się do monetyzacji, gdzie pobrania wymagają, że użytkownik jest zalogowany."
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.title": {
|
||||
"message": "Szczegóły analityki monetyzacji"
|
||||
},
|
||||
"analytics.chart.legend.previous-period-suffix": {
|
||||
"message": "{name} (poprz.)"
|
||||
},
|
||||
@@ -126,14 +147,38 @@
|
||||
"message": "Pokazać wszystkie {count} linii na wykresie?"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "Pokazano {itemType, select, project {{count, plural, one {projekt} other {wszystkie projekty}}} country {{count, plural, one {kraj} other {wszystkie kraje}}} monetization {{count, plural, one {wartość z monetyzacji} other {wszystkie wartości z monetyzacji}}} downloadSource {{count, plural, one {żródło pobrań} other {wszystkie źródła pobrań}}} downloadReason {{count, plural, one {powód pobrań} other {wszystkie powody pobrań}}} projectVersion {{count, plural, one {wersję projektu} other {wszystkie wersje projektu}}} loader {{count, plural, one {loader} other {wszystkie loadery}}} gameVersion {{count, plural, one {wersję gry} other {wszystkie wersje gry}}} other {{count, plural, one {pozycję} other {wszystkie pozycje}}}} z tabeli"
|
||||
"message": "Pokazano {itemType, select, project {{count, plural, one {projekt} other {wszystkie projekty}}} country {{count, plural, one {kraj} other {wszystkie kraje}}} monetization {{count, plural, one {wartość z monetyzacji} other {wszystkie wartości z monetyzacji}}} downloadSource {{count, plural, one {żródło pobrań} other {wszystkie źródła pobrań}}} downloadReason {{count, plural, one {powód pobrań} other {wszystkie powody pobrań}}} member {{count, plural, one {członek} other {wszystkich członków}}} projectVersion {{count, plural, one {wersję projektu} other {wszystkie wersje projektu}}} loader {{count, plural, one {loader} other {wszystkie loadery}}} gameVersion {{count, plural, one {wersję gry} other {wszystkie wersje gry}}} other {{count, plural, one {pozycję} other {wszystkie pozycje}}}} z tabeli"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "Pokazano {count} {itemType, select, project {{count, plural, one {projekt} few {projekty} other {projektów}}} country {{count, plural, one {kraj} few {kraje} other {krajów}}} monetization {{count, plural, one {wartość z monetyzacji} other {wartości z monetyzacji}}} downloadSource {{count, plural, one {żródło pobrań} few {źródła pobrań} other {źródeł pobrań}}} downloadReason {{count, plural, one {powód pobrań} few {powody pobrań} other {powodów pobrań}}} member {{count, plural, one {członka} other {członków}}} projectVersion {{count, plural, one {wersję projektu} few {wersje projektu} other {wersji projektu}}} loader {{count, plural, one {loader} few {loadery} other {loaderów}}} gameVersion {{count, plural, one {wersję gry} few {wersje gry} other {wersji gry}}} other {{count, plural, one {pozycję} few {pozycje} other {pozycji}}}} z tabeli"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "Pokazano {limit} {itemType, select, project {{limit, plural, one {projekt} few {projekty} other {projektów}}} country {{limit, plural, one {kraj} few {kraje} other {krajów}}} monetization {{limit, plural, one {wartość z monetyzacji} other {wartości z monetyzacji}}} downloadSource {{limit, plural, one {żródło pobrań} few {źródła pobrań} other {źródeł pobrań}}} downloadReason {{limit, plural, one {powód pobrań} few {powody pobrań} other {powodów pobrań}}} member {{limit, plural, one {członka} other {członków}}} projectVersion {{limit, plural, one {wersję projektu} few {wersje projektu} other {wersji projektu}}} loader {{limit, plural, one {loader} few {loadery} other {loaderów}}} gameVersion {{limit, plural, one {wersję gry} few {wersje gry} other {wersji gry}}} other {{limit, plural, one {pozycję} few {pozycje} other {pozycji}}}} z tabeli"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "Pokazano top {count} {itemType, select, project {{count, plural, one {projekt} few {projekty} other {projektów}}} country {{count, plural, one {kraj} few {kraje} other {krajów}}} monetization {{count, plural, one {wartość z monetyzacji} other {wartości z monetyzacji}}} downloadSource {{count, plural, one {żródło pobrań} few {źródła pobrań} other {źródeł pobrań}}} downloadReason {{count, plural, one {powód pobrań} few {powody pobrań} other {powodów pobrań}}} member {{count, plural, one {członka} other {członków}}} projectVersion {{count, plural, one {wersję projektu} few {wersje projektu} other {wersji projektu}}} loader {{count, plural, one {loader} few {loadery} other {loaderów}}} gameVersion {{count, plural, one {wersję gry} few {wersje gry} other {wersji gry}}} other {{count, plural, one {pozycję} few {pozycje} other {pozycji}}}} z tabeli"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-on-project": {
|
||||
"message": "Wymaga {project}"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-project-version": {
|
||||
"message": "{dependentProject} wymaga {dependencyProject}, {version}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# dzień} other {# dni}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.hours": {
|
||||
"message": "{count, plural, one {# godzina} few {# godziny} other {# godzin}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.minutes": {
|
||||
"message": "{count, plural, one {# minuta} few {# minuty} other {# minut}}"
|
||||
},
|
||||
"analytics.chart.tooltip.hide-entry": {
|
||||
"message": "Ukryj {name} na wykresie"
|
||||
},
|
||||
"analytics.chart.tooltip.pinned": {
|
||||
"message": "Przypięto informacje"
|
||||
},
|
||||
"analytics.chart.tooltip.pinned-aria": {
|
||||
"message": "Przypięte"
|
||||
},
|
||||
@@ -203,15 +248,33 @@
|
||||
"analytics.filter.search.countries": {
|
||||
"message": "Szukaj kraju..."
|
||||
},
|
||||
"analytics.filter.search.dependent-projects": {
|
||||
"message": "Szukaj projektów..."
|
||||
},
|
||||
"analytics.filter.search.download-sources": {
|
||||
"message": "Szukaj źródeł pobrań..."
|
||||
},
|
||||
"analytics.filter.search.members": {
|
||||
"message": "Szukaj członków..."
|
||||
},
|
||||
"analytics.filter.search.project-versions": {
|
||||
"message": "Szukaj wersji projektu..."
|
||||
},
|
||||
"analytics.filter.search.versions": {
|
||||
"message": "Szukaj wersji..."
|
||||
},
|
||||
"analytics.graph.title.downloads": {
|
||||
"message": "Pobrania w czasie"
|
||||
},
|
||||
"analytics.graph.title.playtime": {
|
||||
"message": "Czas gry w czasie"
|
||||
},
|
||||
"analytics.graph.title.revenue": {
|
||||
"message": "Przychody w czasie"
|
||||
},
|
||||
"analytics.graph.title.views": {
|
||||
"message": "Wyświetlenia w czasie"
|
||||
},
|
||||
"analytics.group-by.1h": {
|
||||
"message": "1 godz"
|
||||
},
|
||||
@@ -302,6 +365,9 @@
|
||||
"analytics.project.all": {
|
||||
"message": "Wszystkie projekty"
|
||||
},
|
||||
"analytics.project.count": {
|
||||
"message": "{count, plural, one {# projekt} few {# projekty} other {# projektów}}"
|
||||
},
|
||||
"analytics.project.icon-alt": {
|
||||
"message": "Ikona {name}"
|
||||
},
|
||||
@@ -347,6 +413,12 @@
|
||||
"analytics.stat.playtime-hours": {
|
||||
"message": "{hours} godz"
|
||||
},
|
||||
"analytics.stat.previous-period-comparison": {
|
||||
"message": "W porównaniu z poprzednim okresem"
|
||||
},
|
||||
"analytics.stat.previous-period-comparison-short": {
|
||||
"message": "W porównaniu z poprzednim"
|
||||
},
|
||||
"analytics.stat.revenue": {
|
||||
"message": "Przychód"
|
||||
},
|
||||
@@ -365,6 +437,9 @@
|
||||
"analytics.table.csv.date-range": {
|
||||
"message": "Od {start} do {end}"
|
||||
},
|
||||
"analytics.table.csv.filename": {
|
||||
"message": "Analityka Modrinth - {breakdown} - {dateRange}"
|
||||
},
|
||||
"analytics.table.csv.header.playtime-seconds": {
|
||||
"message": "Czas gry (w sekundach)"
|
||||
},
|
||||
@@ -374,6 +449,15 @@
|
||||
"analytics.table.duration.days": {
|
||||
"message": "{count, plural, one {# dzień} other {# dni}}"
|
||||
},
|
||||
"analytics.table.duration.hours": {
|
||||
"message": "{count, plural, one {# godzina} few {# godziny} other {# godzin}}"
|
||||
},
|
||||
"analytics.table.duration.minutes": {
|
||||
"message": "{count, plural, one {# minuta} few {# minuty} other {# minut}}"
|
||||
},
|
||||
"analytics.table.empty.no-matching-rows": {
|
||||
"message": "Brak pasujących wierszy analiz"
|
||||
},
|
||||
"analytics.table.export-csv": {
|
||||
"message": "Eksportuj jako CSV"
|
||||
},
|
||||
@@ -387,7 +471,7 @@
|
||||
"message": "Pokazano od {start} do {end} z {total}"
|
||||
},
|
||||
"analytics.table.search.placeholder": {
|
||||
"message": "Wyszukaj..."
|
||||
"message": "Szukaj..."
|
||||
},
|
||||
"analytics.threshold.countries-above": {
|
||||
"message": "Kraje powyżej"
|
||||
@@ -419,6 +503,12 @@
|
||||
"analytics.value.monetized": {
|
||||
"message": "Monetyzowane"
|
||||
},
|
||||
"analytics.value.no-dependent": {
|
||||
"message": "Żadne"
|
||||
},
|
||||
"analytics.value.no-dependent-tooltip": {
|
||||
"message": "Pobrano z innych powodów poza byciem wymaganym"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "Brak"
|
||||
},
|
||||
@@ -681,10 +771,10 @@
|
||||
"message": "Zresetuj swoje hasło"
|
||||
},
|
||||
"auth.sign-in.2fa.description": {
|
||||
"message": "Wprowadź otrzymany kod 2FA, aby kontynuować."
|
||||
"message": "Wprowadź otrzymany kod, aby kontynuować."
|
||||
},
|
||||
"auth.sign-in.2fa.label": {
|
||||
"message": "Wprowadź otrzymany kod 2FA"
|
||||
"message": "Wprowadź otrzymany kod"
|
||||
},
|
||||
"auth.sign-in.2fa.placeholder": {
|
||||
"message": "Wprowadź kod..."
|
||||
@@ -1133,6 +1223,9 @@
|
||||
"dashboard.collections.empty.no-match-hint": {
|
||||
"message": "Spróbuj zmienić filtry wyszukiwania lub zapytanie."
|
||||
},
|
||||
"dashboard.collections.label.projects-count": {
|
||||
"message": "{count} {countPlural, plural, one {projekt} few {projekty} other {projektów}}"
|
||||
},
|
||||
"dashboard.collections.label.search-input": {
|
||||
"message": "Szukaj swoich kolekcji"
|
||||
},
|
||||
@@ -1433,6 +1526,9 @@
|
||||
"dashboard.notifications.link.view-history": {
|
||||
"message": "Pokaż historię powiadomień"
|
||||
},
|
||||
"dashboard.notifications.link.view-more": {
|
||||
"message": "Pokaż jeszcze {extraNotifs} {extraNotifs, plural, one {powiadomienie} few {powiadomienia} other {powiadomień}}"
|
||||
},
|
||||
"dashboard.organizations.button.create": {
|
||||
"message": "Utwórz organizację"
|
||||
},
|
||||
@@ -1730,6 +1826,9 @@
|
||||
"dashboard.withdraw.error.email-verification.title": {
|
||||
"message": "Wymagana weryfikacja e-maila"
|
||||
},
|
||||
"dashboard.withdraw.error.generic.text": {
|
||||
"message": "Nie udało się przesłać prośby o wypłatę, sprawdź podane dane lub skontaktuj się z obsługą"
|
||||
},
|
||||
"dashboard.withdraw.error.generic.title": {
|
||||
"message": "Wypłata nie powiodła się"
|
||||
},
|
||||
@@ -2243,6 +2342,9 @@
|
||||
"landing.subheading": {
|
||||
"message": "Odkrywaj, graj i udostępniaj treści Minecraft poprzez naszą otwartoźródłową platformę, stworzoną dla społeczności."
|
||||
},
|
||||
"layout.action.analytics-events": {
|
||||
"message": "Wydarzenia analityczne"
|
||||
},
|
||||
"layout.action.change-theme": {
|
||||
"message": "Zmień motyw"
|
||||
},
|
||||
@@ -2819,6 +2921,9 @@
|
||||
"profile.button.set-affiliate": {
|
||||
"message": "Ustaw jako afiliację"
|
||||
},
|
||||
"profile.collection.projects-count": {
|
||||
"message": "{count, plural, one {# projekt} few {# projekty} other {# projektów}}"
|
||||
},
|
||||
"profile.details.label.auth-providers": {
|
||||
"message": "Dostawcy uwierzytelniania"
|
||||
},
|
||||
@@ -2855,6 +2960,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Kolekcja"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, one {pobranie} few {pobrania} other {pobrań}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Dołączył(-a)"
|
||||
},
|
||||
@@ -2873,6 +2981,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Organizacje"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, one {projekt} few {projekty} other {projektów}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Zapisywanie..."
|
||||
},
|
||||
@@ -2906,6 +3017,9 @@
|
||||
"project-member-header.invitation-title": {
|
||||
"message": "Zaproszenie do dołączenia do projektu"
|
||||
},
|
||||
"project-member-header.invitation-with-role": {
|
||||
"message": "Zostałeś zaproszony do udziału w tym projekcie w roli '{role}''."
|
||||
},
|
||||
"project-member-header.success-decline": {
|
||||
"message": "Odrzucono zaproszenie do zespołu"
|
||||
},
|
||||
@@ -3212,9 +3326,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "Jeżeli potrzebujesz pomocy lub masz więcej pytań, odwiedź <help-center-link>centrum pomocy Modrinth</help-center-link> i kliknij w niebieskie kółko, by skontaktować się z obsługą."
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "Pokaż UI członków"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "Prywatny wątek konwersacji z moderatorami Modrinth. Mogą skontaktować się z Tobą w razie problemów z Twoim projektem."
|
||||
},
|
||||
@@ -3329,6 +3440,9 @@
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Odwiedź pulpit projektów"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count, plural, one {pobranie} few {pobrania} other {pobrań}}"
|
||||
},
|
||||
"project.stats.followers-label": {
|
||||
"message": "{count, plural, one {obserwujący} other {obserwujących}}"
|
||||
},
|
||||
@@ -3341,9 +3455,6 @@
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, one {Ta wersja jest} other {Te wersje są}} obecnie wstrzymane i nie widnieją na publicznej liście. Proszę o przesłanie potwierdzenia posiadania zgody na redystrybucję określonych plików zawartych w {count, plural, one {tej wersji} other {tych wersjach}} modpacka."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "Rozwiąż"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, one {Wersja {version_name}} other {Wersje}} wstrzymane ze względu na nieznaną osadzoną zawartość"
|
||||
},
|
||||
@@ -3426,7 +3537,7 @@
|
||||
"message": "Wyślij zgłoszenie"
|
||||
},
|
||||
"scopes.analytics.description": {
|
||||
"message": "Dostęp do danych analityki"
|
||||
"message": "Dostęp do danych analitycznych"
|
||||
},
|
||||
"scopes.analytics.label": {
|
||||
"message": "Odczytywanie danych analitycznych"
|
||||
@@ -3444,7 +3555,7 @@
|
||||
"message": "Organizacje"
|
||||
},
|
||||
"scopes.category.pats": {
|
||||
"message": "Tokeny dostępu"
|
||||
"message": "Klucze dostępu osobistego"
|
||||
},
|
||||
"scopes.category.payouts": {
|
||||
"message": "Wypłaty"
|
||||
@@ -3486,19 +3597,19 @@
|
||||
"message": "Odczytywanie kolekcji"
|
||||
},
|
||||
"scopes.collectionWrite.description": {
|
||||
"message": "Modyfikowanie kolekcji"
|
||||
"message": "Edytowanie kolekcji"
|
||||
},
|
||||
"scopes.collectionWrite.label": {
|
||||
"message": "Pisz kolekcje"
|
||||
"message": "Edytowanie kolekcji"
|
||||
},
|
||||
"scopes.notificationRead.description": {
|
||||
"message": "Odczytywanie twoich powiadomień"
|
||||
"message": "Odczytywanie Twoich powiadomień"
|
||||
},
|
||||
"scopes.notificationRead.label": {
|
||||
"message": "Odczytywanie powiadomień"
|
||||
},
|
||||
"scopes.notificationWrite.description": {
|
||||
"message": "Usuń/Wyświetl swoje powiadomienia"
|
||||
"message": "Usuwanie/odczytywanie Twoich powiadomień"
|
||||
},
|
||||
"scopes.notificationWrite.label": {
|
||||
"message": "Pisz powiadomienia"
|
||||
@@ -3516,46 +3627,58 @@
|
||||
"message": "Usuwanie organizacji"
|
||||
},
|
||||
"scopes.organizationRead.description": {
|
||||
"message": "Odczytaj organizacje"
|
||||
"message": "Odczytywanie organizacji"
|
||||
},
|
||||
"scopes.organizationRead.label": {
|
||||
"message": "Odczytaj organizacje"
|
||||
"message": "Odczytywanie organizacji"
|
||||
},
|
||||
"scopes.organizationWrite.description": {
|
||||
"message": "Napisz do organizacji"
|
||||
"message": "Edytowanie organizacji"
|
||||
},
|
||||
"scopes.organizationWrite.label": {
|
||||
"message": "Napisz organizacje"
|
||||
"message": "Edytowanie organizacji"
|
||||
},
|
||||
"scopes.patCreate.description": {
|
||||
"message": "Tworzenie kluczy dostępu osobistego"
|
||||
},
|
||||
"scopes.patCreate.label": {
|
||||
"message": "Tworzenie PATów"
|
||||
"message": "Tworzenie kluczy dostępu osobistego"
|
||||
},
|
||||
"scopes.patDelete.description": {
|
||||
"message": "Usuwanie kluczy dostępu osobistego"
|
||||
},
|
||||
"scopes.patDelete.label": {
|
||||
"message": "Usuwanie PATów"
|
||||
"message": "Usuwanie kluczy dostępu osobistego"
|
||||
},
|
||||
"scopes.patRead.description": {
|
||||
"message": "Odczytywanie kluczy dostępu osobistego"
|
||||
},
|
||||
"scopes.patRead.label": {
|
||||
"message": "Odczytywanie PATów"
|
||||
"message": "Odczytywanie kluczy dostępu osobistego"
|
||||
},
|
||||
"scopes.patWrite.description": {
|
||||
"message": "Edytowanie kluczy dostępu osobistego"
|
||||
},
|
||||
"scopes.patWrite.label": {
|
||||
"message": "Napisz PAT"
|
||||
"message": "Edytowanie kluczy dostępu osobistego"
|
||||
},
|
||||
"scopes.payoutsRead.description": {
|
||||
"message": "Przeczytaj dane dotyczące wypłat"
|
||||
"message": "Odczytywanie danych wypłat"
|
||||
},
|
||||
"scopes.payoutsRead.label": {
|
||||
"message": "Przeczytaj wypłaty"
|
||||
"message": "Odczytywanie wypłat"
|
||||
},
|
||||
"scopes.payoutsWrite.description": {
|
||||
"message": "Wypłać pieniądze"
|
||||
"message": "Wypłacanie pieniędzy"
|
||||
},
|
||||
"scopes.payoutsWrite.label": {
|
||||
"message": "Napisz Wypłaty"
|
||||
"message": "Zarządzanie wypłatami"
|
||||
},
|
||||
"scopes.performAnalytics.description": {
|
||||
"message": "Wykonuj działania analityczne"
|
||||
"message": "Wykonywanie działań analitycznych"
|
||||
},
|
||||
"scopes.performAnalytics.label": {
|
||||
"message": "Przeprowadź analizę"
|
||||
"message": "Przeprowadzanie analityki"
|
||||
},
|
||||
"scopes.projectCreate.description": {
|
||||
"message": "Tworzenie nowych projektów"
|
||||
@@ -3564,22 +3687,22 @@
|
||||
"message": "Tworzenie projektów"
|
||||
},
|
||||
"scopes.projectDelete.description": {
|
||||
"message": "Usuń swoje projekty"
|
||||
"message": "Usuwanie Twoich projektów"
|
||||
},
|
||||
"scopes.projectDelete.label": {
|
||||
"message": "Usuwanie projektów"
|
||||
},
|
||||
"scopes.projectRead.description": {
|
||||
"message": "Przeczytaj wszystkie swoje projekty"
|
||||
"message": "Odczytywanie wszystkich Twoich projektów"
|
||||
},
|
||||
"scopes.projectRead.label": {
|
||||
"message": "Przeczytaj projekty"
|
||||
"message": "Odczytywanie projektów"
|
||||
},
|
||||
"scopes.projectWrite.description": {
|
||||
"message": "Zapisz dane projektu"
|
||||
"message": "Edytowanie danych projektu"
|
||||
},
|
||||
"scopes.projectWrite.label": {
|
||||
"message": "Pisz projekty"
|
||||
"message": "Edytowanie projektów"
|
||||
},
|
||||
"scopes.reportCreate.description": {
|
||||
"message": "Tworzenie zgłoszeń"
|
||||
@@ -3588,22 +3711,22 @@
|
||||
"message": "Tworzenie zgłoszeń"
|
||||
},
|
||||
"scopes.reportDelete.description": {
|
||||
"message": "Usuń raporty"
|
||||
"message": "Usuwanie zgłoszeń"
|
||||
},
|
||||
"scopes.reportDelete.label": {
|
||||
"message": "Usuń raporty"
|
||||
"message": "Usuwanie zgłoszeń"
|
||||
},
|
||||
"scopes.reportRead.description": {
|
||||
"message": "Przeczytaj raporty"
|
||||
"message": "Odczytywanie zgłoszeń"
|
||||
},
|
||||
"scopes.reportRead.label": {
|
||||
"message": "Przeczytaj raporty"
|
||||
"message": "Odczytywanie zgłoszeń"
|
||||
},
|
||||
"scopes.reportWrite.description": {
|
||||
"message": "Edytuj raporty"
|
||||
"message": "Edytowanie zgłoszeń"
|
||||
},
|
||||
"scopes.reportWrite.label": {
|
||||
"message": "Napisz raporty"
|
||||
"message": "Edytowanie zgłoszeń"
|
||||
},
|
||||
"scopes.sessionAccess.description": {
|
||||
"message": "Dostęp do sesji wydanych przez Modrinth"
|
||||
@@ -3615,79 +3738,79 @@
|
||||
"message": "Usuwanie sesji"
|
||||
},
|
||||
"scopes.sessionDelete.label": {
|
||||
"message": "Usuń sesje"
|
||||
"message": "Usuwanie sesji"
|
||||
},
|
||||
"scopes.sessionRead.description": {
|
||||
"message": "Przeczytaj aktywne sesje"
|
||||
"message": "Odczytywanie aktywnych sesji"
|
||||
},
|
||||
"scopes.sessionRead.label": {
|
||||
"message": "Przeczytaj sesje"
|
||||
"message": "Odczytywanie sesji"
|
||||
},
|
||||
"scopes.threadRead.description": {
|
||||
"message": "Przeczytaj wątki"
|
||||
"message": "Odczytywanie wątków"
|
||||
},
|
||||
"scopes.threadRead.label": {
|
||||
"message": "Przeczytaj wątki"
|
||||
"message": "Odczytywanie wątków"
|
||||
},
|
||||
"scopes.threadWrite.description": {
|
||||
"message": "Napisz do wątków"
|
||||
"message": "Pisanie do wątków"
|
||||
},
|
||||
"scopes.threadWrite.label": {
|
||||
"message": "Napisz wątki"
|
||||
"message": "Pisanie do wątków"
|
||||
},
|
||||
"scopes.userAuthWrite.description": {
|
||||
"message": "Zmodyfikuj swoje dane uwierzytelniające"
|
||||
"message": "Edytowanie twoich danych uwierzytelniania"
|
||||
},
|
||||
"scopes.userAuthWrite.label": {
|
||||
"message": "Zapisz dane autoryzacyjne"
|
||||
"message": "Edytowanie danych uwierzytelniania"
|
||||
},
|
||||
"scopes.userDelete.description": {
|
||||
"message": "Usuń swoje konto"
|
||||
"message": "Usuwanie Twojego konta"
|
||||
},
|
||||
"scopes.userDelete.label": {
|
||||
"message": "Usuń swoje konto"
|
||||
"message": "Usuwanie Twojego konta"
|
||||
},
|
||||
"scopes.userRead.description": {
|
||||
"message": "Dostęp do informacji w publicznym profilu"
|
||||
},
|
||||
"scopes.userRead.label": {
|
||||
"message": "Odczyt danych użytkownika"
|
||||
"message": "Odczytywanie danych użytkownika"
|
||||
},
|
||||
"scopes.userReadEmail.description": {
|
||||
"message": "Przeczytaj swoją wiadomość e-mail"
|
||||
"message": "Odczytywanie twoich wiadomości e-mail"
|
||||
},
|
||||
"scopes.userReadEmail.label": {
|
||||
"message": "Przeczytaj e-maila użytkownika"
|
||||
"message": "Odczytywanie wiadomości e-mail"
|
||||
},
|
||||
"scopes.userWrite.description": {
|
||||
"message": "Napisz do swojego profilu"
|
||||
"message": "Pisanie na Twoim profilu"
|
||||
},
|
||||
"scopes.userWrite.label": {
|
||||
"message": "Zapisz dane użytkownika"
|
||||
"message": "Edytowanie danych użytkownika"
|
||||
},
|
||||
"scopes.versionCreate.description": {
|
||||
"message": "Utwórz nowe wersje"
|
||||
"message": "Tworzenie nowych wersji"
|
||||
},
|
||||
"scopes.versionCreate.label": {
|
||||
"message": "Twórz wersje"
|
||||
"message": "Tworzenie wersji"
|
||||
},
|
||||
"scopes.versionDelete.description": {
|
||||
"message": "Usuń wersję"
|
||||
"message": "Usuwanie wersji"
|
||||
},
|
||||
"scopes.versionDelete.label": {
|
||||
"message": "Usuń wersje"
|
||||
"message": "Usuwanie wersji"
|
||||
},
|
||||
"scopes.versionRead.description": {
|
||||
"message": "Przeczytaj wszystkie wersje"
|
||||
"message": "Odczytywanie wszystkich wersji"
|
||||
},
|
||||
"scopes.versionRead.label": {
|
||||
"message": "Przeczytaj wersje"
|
||||
"message": "Odczytywanie wersji"
|
||||
},
|
||||
"scopes.versionWrite.description": {
|
||||
"message": "Zapisz dane wersji"
|
||||
"message": "Edytowanie danych wersji"
|
||||
},
|
||||
"scopes.versionWrite.label": {
|
||||
"message": "Napisz wersje"
|
||||
"message": "Edytowanie wersji"
|
||||
},
|
||||
"search.filter.game-version-shader-message": {
|
||||
"message": "Paczki shaderów stworzone dla starszych wersji najprawdopodobniej będą działać na nowszych wersjach z pomniejszymi błędami."
|
||||
@@ -3743,6 +3866,9 @@
|
||||
"servers.plan.small.description": {
|
||||
"message": "Idealny dla 1–5 przyjaciół z kilkoma lekkimi modami."
|
||||
},
|
||||
"servers.purchase.step.plan.billed": {
|
||||
"message": "naliczane {interval, select, monthly {miesięcznie} quarterly {co kwartał} yearly {rocznie} other {{interval}}}"
|
||||
},
|
||||
"settings.account.button.complete-setup": {
|
||||
"message": "Zakończ ustawianie"
|
||||
},
|
||||
@@ -3897,14 +4023,20 @@
|
||||
"message": "Bezpieczeństwo konta"
|
||||
},
|
||||
"settings.account.security.two-factor.action.remove": {
|
||||
"message": "Usuń weryfikację"
|
||||
"message": "Usuń weryfikację dwuskładnikową"
|
||||
},
|
||||
"settings.account.security.two-factor.action.setup": {
|
||||
"message": "Dodaj weryfikację"
|
||||
"message": "Dodaj weryfikację dwuskładnikową"
|
||||
},
|
||||
"settings.account.security.two-factor.description": {
|
||||
"message": "Dodaj dodatkową warstwę bezpieczeństwa podczas logowania na Twoje konto."
|
||||
},
|
||||
"settings.account.security.two-factor.modal.remove.header": {
|
||||
"message": "Usuń weryfikację dwuskładnikową"
|
||||
},
|
||||
"settings.account.security.two-factor.modal.setup.header": {
|
||||
"message": "Dodaj weryfikację dwuskładnikową"
|
||||
},
|
||||
"settings.account.security.two-factor.title": {
|
||||
"message": "Weryfikacja dwuetapowa"
|
||||
},
|
||||
@@ -3921,7 +4053,7 @@
|
||||
"message": "Wprowadź otrzymany kod weryfikacyjny, aby kontynuować."
|
||||
},
|
||||
"settings.account.two-factor.field.code.label": {
|
||||
"message": "Wprowadź otrzymany kod 2FA"
|
||||
"message": "Wprowadź otrzymany kod"
|
||||
},
|
||||
"settings.account.two-factor.field.code.placeholder": {
|
||||
"message": "Wprowadź kod..."
|
||||
@@ -4238,9 +4370,18 @@
|
||||
"settings.billing.subscription.title": {
|
||||
"message": "Subskrypcje"
|
||||
},
|
||||
"settings.billing.switch.switching-to-interval": {
|
||||
"message": "Zmienianie na {interval, select, monthly {monthly} yearly {yearly} other {{interval}}}"
|
||||
},
|
||||
"settings.billing.switch.to-interval": {
|
||||
"message": "Zmień na {interval, select, monthly {monthly} yearly {yearly} other {{interval}}}"
|
||||
},
|
||||
"settings.billing.switch.tooltip.monthly-additional-per-year": {
|
||||
"message": "Miesięcznie będzie cię to kosztować dodatkowe {amount} na rok"
|
||||
},
|
||||
"settings.billing.switches-to-billing-on": {
|
||||
"message": "Zmieni się na rozliczanie {interval, select, monthly {miesięczne} yearly {roczne} other {{interval}}} dnia {date}"
|
||||
},
|
||||
"settings.billing.update-method": {
|
||||
"message": "Zaktualizuj metodę"
|
||||
},
|
||||
@@ -4347,13 +4488,13 @@
|
||||
"message": "Ustawienia wyświetlania"
|
||||
},
|
||||
"settings.pats.action.create": {
|
||||
"message": "Utwórz PAT"
|
||||
"message": "Utwórz klucz dostępu osobistego"
|
||||
},
|
||||
"settings.pats.description": {
|
||||
"message": "PATy zezwalają na dostęp do API Modrinth. Mogą być dowolnie tworzone bądź unieważniane. Więcej informacji zawarte jest w <doc-link>dokumentacji API Modrinth</doc-link>."
|
||||
"message": "Klucze dostępu osobistego zezwalają na dostęp do API Modrinth. Mogą być dowolnie tworzone bądź unieważniane. Więcej informacji zawarte jest w <doc-link>dokumentacji API Modrinth</doc-link>."
|
||||
},
|
||||
"settings.pats.modal.create.action": {
|
||||
"message": "Utwórz PAT"
|
||||
"message": "Utwórz klucz dostępu osobistego"
|
||||
},
|
||||
"settings.pats.modal.create.expires.label": {
|
||||
"message": "Wygasa"
|
||||
@@ -4362,25 +4503,25 @@
|
||||
"message": "Nazwa"
|
||||
},
|
||||
"settings.pats.modal.create.name.placeholder": {
|
||||
"message": "Wprowadź nazwę PATu..."
|
||||
"message": "Wprowadź nazwę klucza..."
|
||||
},
|
||||
"settings.pats.modal.create.title": {
|
||||
"message": "Utwórz token dostępu osobistego"
|
||||
"message": "Utwórz klucz dostępu osobistego"
|
||||
},
|
||||
"settings.pats.modal.delete.action": {
|
||||
"message": "Usuń token"
|
||||
"message": "Usuń klucz"
|
||||
},
|
||||
"settings.pats.modal.delete.description": {
|
||||
"message": "Usunie to token na zawsze (na serio na zawsze)."
|
||||
"message": "Usunie to klucz na zawsze (na serio na zawsze)."
|
||||
},
|
||||
"settings.pats.modal.delete.title": {
|
||||
"message": "Czy na pewno chcesz usunąć ten token?"
|
||||
"message": "Czy na pewno chcesz usunąć ten klucz?"
|
||||
},
|
||||
"settings.pats.modal.edit.title": {
|
||||
"message": "Edytuj token dostępu osobistego"
|
||||
"message": "Edytuj klucz dostępu osobistego"
|
||||
},
|
||||
"settings.pats.token.action.edit": {
|
||||
"message": "Edytuj token"
|
||||
"message": "Edytuj klucz"
|
||||
},
|
||||
"settings.pats.token.action.revoke": {
|
||||
"message": "Unieważnij token"
|
||||
|
||||
@@ -23,6 +23,15 @@
|
||||
"analytics.breakdown.country": {
|
||||
"message": "País"
|
||||
},
|
||||
"analytics.breakdown.dependent-on": {
|
||||
"message": "Dependente em"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-download": {
|
||||
"message": "Projeto dependente"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-type": {
|
||||
"message": "Tipo de projeto dependente"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "Motivo do download"
|
||||
},
|
||||
@@ -38,6 +47,9 @@
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "Loader"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "Membro"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "Monetização"
|
||||
},
|
||||
@@ -135,16 +147,22 @@
|
||||
"message": "Exibir todas as {count} linhas no gráfico?"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "Exibindo {itemType, select,project {{count, plural, one {todo o projeto} other {todos os projetos}}}country {{count, plural, one {todo o país} other {todos os países}}}monetization {{count, plural, one {todo o valor de monetização} other {todos os valores de monetização}}}downloadSource {{count, plural, one {toda a fonte de download} other {todas as fontes de download}}} downloadReason {{count, plural, one {todo o motivo de download} other {todos os motivos de download}}} projectVersion {{count, plural, one {toda a versão do projeto} other {todas as versões do projeto}}} loader {{count, plural, one {todo loader} other {todos os loaders}}} gameVersion {{count, plural, one {toda a versão do jogo} other {todas as versões do jogo}}} other {{count, plural, one {todo o item} other {todos os itens}}}\n} da tabela"
|
||||
"message": "Exibindo todo(s) {itemType, select, project {{count, plural, one {projeto} other {os projetos}}} country {{count, plural, one {país} other {os países}}} monetization {{count, plural, one {valor monetário} other {os valores monetários}}} downloadSource {{count, plural, one {fonte do download} other {as fontes do download}}} downloadReason {{count, plural, one {motivo do download} other {os motivos do download}}} member {{count, plural, one {membro} other {os membros}}} projectVersion {{count, plural, one {versão do projeto} other {as versões do projeto}}} loader {{count, plural, one {loader} other {os loaders}}} gameVersion {{count, plural, one {versão do jogo} other {as versões do jogo}}} other {{count, plural, one {item} other {itens}}}} da tabela"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "Exibindo {count} {itemType, select, project {{count, plural, one {projeto} other {projetos}}} country {{count, plural, one {país} other {países}}} monetization {{count, plural, one {valor de monetização} other {valores de monetização}}} downloadSource {{count, plural, one {fonte de download} other {fontes de download}}} downloadReason {{count, plural, one {motivo de download} other {motivos de download}}} projectVersion {{count, plural, one {versão do projeto} other {versões do projeto}}} loader {{count, plural, one {loader} other {loaders}}} gameVersion {{count, plural, one {versão do jogo} other {versões do jogo}}} other {{count, plural, one {item} other {itens}}}} da tabela"
|
||||
"message": "Exibindo {count} {itemType, select, project {{count, plural, one {projeto} other {os projetos}}} country {{count, plural, one {país} other {os países}}} monetization {{count, plural, one {valor monetário} other {os valores monetários}}} downloadSource {{count, plural, one {fonte do download} other {as fontes do download}}} downloadReason {{count, plural, one {motivo do download} other {os motivos do download}}} member {{count, plural, one {membro} other {os membros}}} projectVersion {{count, plural, one {versão do projeto} other {as versões do projeto}}} loader {{count, plural, one {loader} other {os loaders}}} gameVersion {{count, plural, one {versão do jogo} other {as versões do jogo}}} other {{count, plural, one {item} other {itens}}}} da tabela"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "Exibindo {limit} {itemType, select, project {{limit, plural, one {projeto} other {projetos}}} country {{limit, plural, one {país} other {países}}} monetization {{limit, plural, one {valor de monetização} other {valores de monetização}}} downloadSource {{limit, plural, one {fonte de download} other {fontes de download}}} downloadReason {{limit, plural, one {motivo de download} other {motivos de download}}} projectVersion {{limit, plural, one {versão do projeto} other {versões do projeto}}} loader {{limit, plural, one {loader} other {loaders}}} gameVersion {{limit, plural, one {versão do jogo} other {versões do jogo}}} other {{limit, plural, one {item} other {itens}}}} da tabela"
|
||||
"message": "Exibindo {limit} {itemType, select, project {{limit, plural, one {projeto} other {os projetos}}} country {{limit, plural, one {país} other {os países}}} monetization {{limit, plural, one {valor monetário} other {os valores monetários}}} downloadSource {{limit, plural, one {fonte do download} other {as fontes do download}}} downloadReason {{limit, plural, one {motivo do download} other {os motivos do download}}} member {{limit, plural, one {membro} other {os membros}}} projectVersion {{limit, plural, one {versão do projeto} other {as versões do projeto}}} loader {{limit, plural, one {loader} other {os loaders}}} gameVersion {{limit, plural, one {versão do jogo} other {as versões do jogo}}} other {{limit, plural, one {item} other {itens}}}} da tabela"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "Exibindo os {count} {itemType, select,\nproject {{count, plural, one {projeto principal} other {principais projetos}}}\ncountry {{count, plural, one {país principal} other {principais países}}}\nmonetization {{count, plural, one {valor de monetização principal} other {principais valores de monetização}}}\ndownloadSource {{count, plural, one {fonte de download principal} other {principais fontes de download}}}\ndownloadReason {{count, plural, one {motivo de download principal} other {principais motivos de download}}}\nprojectVersion {{count, plural, one {versão principal do projeto} other {principais versões do projeto}}}\nloader {{count, plural, one {loader principal} other {loaders principais}}}\ngameVersion {{count, plural, one {versão principal do jogo} other {principais versões do jogo}}}\nother {{count, plural, one {item principal} other {principais itens}}}\n} da tabela"
|
||||
"message": "Exibindo {count} {itemType, select, project {{count, plural, one {projeto} other {os projetos}}} country {{count, plural, one {país} other {os países}}} monetization {{count, plural, one {valor monetário} other {os valores monetários}}} downloadSource {{count, plural, one {fonte do download} other {as fontes do download}}} downloadReason {{count, plural, one {motivo do download} other {os motivos do download}}} member {{count, plural, one {membro} other {os membros}}} projectVersion {{count, plural, one {versão do projeto} other {as versões do projeto}}} loader {{count, plural, one {loader} other {os loaders}}} gameVersion {{count, plural, one {versão do jogo} other {as versões do jogo}}} other {{count, plural, one {item} other {itens}}}} do topo da tabela"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-on-project": {
|
||||
"message": "Dependente em {project}"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-project-version": {
|
||||
"message": "{dependentProject} dependente em {dependencyProject}, {version}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# dia} other {# dias}}"
|
||||
@@ -230,9 +248,15 @@
|
||||
"analytics.filter.search.countries": {
|
||||
"message": "Buscar países..."
|
||||
},
|
||||
"analytics.filter.search.dependent-projects": {
|
||||
"message": "Buscar projetos..."
|
||||
},
|
||||
"analytics.filter.search.download-sources": {
|
||||
"message": "Buscar fontes dos downloads..."
|
||||
},
|
||||
"analytics.filter.search.members": {
|
||||
"message": "Buscar membros..."
|
||||
},
|
||||
"analytics.filter.search.project-versions": {
|
||||
"message": "Buscar versões do projeto..."
|
||||
},
|
||||
@@ -300,7 +324,7 @@
|
||||
"message": "Projeto aprovado"
|
||||
},
|
||||
"analytics.project-event.project-private": {
|
||||
"message": "Projeto definido como privado"
|
||||
"message": "Projeto definido para privado"
|
||||
},
|
||||
"analytics.project-event.project-status-changed": {
|
||||
"message": "O status do projeto foi alterado"
|
||||
@@ -345,10 +369,10 @@
|
||||
"message": "{count, plural, one {# projeto} other {# projetos}}"
|
||||
},
|
||||
"analytics.project.icon-alt": {
|
||||
"message": "{name} Ícone"
|
||||
"message": "Ícone de {name}"
|
||||
},
|
||||
"analytics.project.select": {
|
||||
"message": "Selecione projetos"
|
||||
"message": "Selecionar projetos"
|
||||
},
|
||||
"analytics.project.user": {
|
||||
"message": "Projetos de {username}"
|
||||
@@ -360,10 +384,10 @@
|
||||
"message": "Adicionar filtro"
|
||||
},
|
||||
"analytics.query.label.breakdown": {
|
||||
"message": "Detalhamento:"
|
||||
"message": "Detalhes:"
|
||||
},
|
||||
"analytics.query.label.grouped-by": {
|
||||
"message": "Agrupados por"
|
||||
"message": "Agrupado por"
|
||||
},
|
||||
"analytics.query.label.project": {
|
||||
"message": "Projeto:"
|
||||
@@ -375,7 +399,7 @@
|
||||
"message": "Downloads"
|
||||
},
|
||||
"analytics.stat.monetization-banner.body": {
|
||||
"message": "Somente visualizações e downloads feitos através do Modrinth são elegíveis para monetização e devem passar por filtros de prevenção de fraudes. Os downloads do aplicativo Modrinth também exigem que o usuário esteja logado. Como todos os projetos têm uma proporção semelhante de downloads monetizados, sua receita não mudaria significativamente se todos os downloads fossem contabilizados."
|
||||
"message": "Somente downloads e visualizações feitas através do Modrinth são elegíveis para monetização e devem passar pela filtração anti-fraude. Downloads do Modrinth App também exigem que o usuário esteja conectado. Pois, todos os projetos possuem uma proporção semelhante de downloads monetizados, sua receita não mudaria bastante se todos os downloads fossem contados."
|
||||
},
|
||||
"analytics.stat.monetization-banner.learn-more": {
|
||||
"message": "Saiba mais"
|
||||
@@ -384,10 +408,10 @@
|
||||
"message": "Como funciona a monetização?"
|
||||
},
|
||||
"analytics.stat.playtime": {
|
||||
"message": "Tempo jogado"
|
||||
"message": "Tempo de jogo"
|
||||
},
|
||||
"analytics.stat.playtime-hours": {
|
||||
"message": "{hours} h"
|
||||
"message": "{hours}h"
|
||||
},
|
||||
"analytics.stat.previous-period-comparison": {
|
||||
"message": "vs período anterior"
|
||||
@@ -405,7 +429,7 @@
|
||||
"message": "N/D"
|
||||
},
|
||||
"analytics.stat.unavailable-tooltip": {
|
||||
"message": "Estatística não disponível para a consulta atual"
|
||||
"message": "Estatística indisponível para a consulta atual"
|
||||
},
|
||||
"analytics.stat.views": {
|
||||
"message": "Visualizações"
|
||||
@@ -414,10 +438,10 @@
|
||||
"message": "{start} a {end}"
|
||||
},
|
||||
"analytics.table.csv.filename": {
|
||||
"message": "Análises do Modrinth: Detalhamento por {breakdown} - {dateRange}"
|
||||
"message": "Estatísticas do Modrinth: Detalhes por {breakdown} - {dateRange}"
|
||||
},
|
||||
"analytics.table.csv.header.playtime-seconds": {
|
||||
"message": "Tempo jogado (segundos)"
|
||||
"message": "Tempo de jogo (segundos)"
|
||||
},
|
||||
"analytics.table.csv.selected-range": {
|
||||
"message": "Intervalo selecionado"
|
||||
@@ -432,7 +456,7 @@
|
||||
"message": "{count, plural, one {# minuto} other {# minutos}}"
|
||||
},
|
||||
"analytics.table.empty.no-matching-rows": {
|
||||
"message": "Nenhuma linha de análise correspondente"
|
||||
"message": "Sem linhas de estatísticas correspondentes"
|
||||
},
|
||||
"analytics.table.export-csv": {
|
||||
"message": "Exportar CSV"
|
||||
@@ -479,6 +503,12 @@
|
||||
"analytics.value.monetized": {
|
||||
"message": "Monetizado"
|
||||
},
|
||||
"analytics.value.no-dependent": {
|
||||
"message": "Nenhum"
|
||||
},
|
||||
"analytics.value.no-dependent-tooltip": {
|
||||
"message": "Instalado por outros motivos além de ser uma dependência"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "Nenhum"
|
||||
},
|
||||
@@ -492,28 +522,28 @@
|
||||
"message": "Não monetizado"
|
||||
},
|
||||
"app-marketing.download.description": {
|
||||
"message": "Nosso aplicativo para PC está disponível em todas as plataformas, escolha a versão desejada."
|
||||
"message": "Nosso aplicativo para desktop está disponível em todas as plataformas, escolha a versão desejada."
|
||||
},
|
||||
"app-marketing.download.download-appimage": {
|
||||
"message": "Baixar o AppImage"
|
||||
"message": "Baixar AppImage"
|
||||
},
|
||||
"app-marketing.download.download-beta": {
|
||||
"message": "Baixar a beta"
|
||||
"message": "Baixar beta"
|
||||
},
|
||||
"app-marketing.download.download-deb": {
|
||||
"message": "Baixar o DEB"
|
||||
"message": "Baixar DEB"
|
||||
},
|
||||
"app-marketing.download.download-rpm": {
|
||||
"message": "Baixar o RPM"
|
||||
"message": "Baixar RPM"
|
||||
},
|
||||
"app-marketing.download.flathub": {
|
||||
"message": "Obtenha no Flathub"
|
||||
"message": "Obtenha-o no Flathub"
|
||||
},
|
||||
"app-marketing.download.linux": {
|
||||
"message": "Linux"
|
||||
},
|
||||
"app-marketing.download.linux-disclaimer": {
|
||||
"message": "As versões Linux do Modrinth App são <issues-link>conhecidas por apresentar problemas</issues-link> em alguns sistemas e configurações. Se o Modrinth App estiver instável no seu sistema, recomendamos que você tente outros aplicativos, como o <prism-link>Prism Launcher</prism-link>, para instalar facilmente o conteúdo do Modrinth."
|
||||
"message": "As versões Linux do Modrinth App são <issues-link>conhecidas por ter problemas</issues-link> em certos sistemas e configurações. Se o Modrinth App for instável em seu sistema, recomendamos você usar outros aplicativos como <prism-link>Prism Launcher</prism-link>, para instalar conteúdo do Modrinth facilmente."
|
||||
},
|
||||
"app-marketing.download.mac": {
|
||||
"message": "Mac"
|
||||
@@ -525,19 +555,19 @@
|
||||
"message": "Ao baixar o Modrinth App, você concorda com nossos <terms-link>Termos</terms-link> e <privacy-link>Política de Privacidade</privacy-link>."
|
||||
},
|
||||
"app-marketing.download.title": {
|
||||
"message": "Baixe a beta do Modrinth App"
|
||||
"message": "Baixar Modrinth App (Beta)"
|
||||
},
|
||||
"app-marketing.download.windows": {
|
||||
"message": "Windows"
|
||||
},
|
||||
"app-marketing.features.follow.description": {
|
||||
"message": "Salve o conteúdo que você gosta e receba atualizações com um clique."
|
||||
"message": "Salve o conteúdo que você gosta e receba atualizações em um só clique."
|
||||
},
|
||||
"app-marketing.features.follow.title": {
|
||||
"message": "Siga os projetos"
|
||||
},
|
||||
"app-marketing.features.importing.description": {
|
||||
"message": "Importe todos os seus perfis favoritos do launcher que você estava usando e comece a usar o Modrinth App em segundos!"
|
||||
"message": "Importe todos os perfis favoritos do launcher que você usou antes e comece a usar o Modrinth App em segundos!"
|
||||
},
|
||||
"app-marketing.features.importing.gdlauncher-alt": {
|
||||
"message": "GDLauncher"
|
||||
@@ -555,7 +585,7 @@
|
||||
"message": "por {author}"
|
||||
},
|
||||
"app-marketing.features.mod-management.description": {
|
||||
"message": "O Modrinth facilita o gerenciamento de todos os seus mods em um só lugar. Você pode instalar, desinstalar e atualizar mods com um único clique."
|
||||
"message": "O Modrinth facilita o gerenciamento de todos os mods em um só lugar. Você pode instalar, desinstalar e atualizar mods facilmente."
|
||||
},
|
||||
"app-marketing.features.mod-management.installed-mods": {
|
||||
"message": "Mods instalados"
|
||||
@@ -573,7 +603,7 @@
|
||||
"message": "Versão"
|
||||
},
|
||||
"app-marketing.features.offline.description": {
|
||||
"message": "Jogue seus mods, com ou sem internet."
|
||||
"message": "Jogue com mods, sem ou com internet."
|
||||
},
|
||||
"app-marketing.features.offline.title": {
|
||||
"message": "Modo offline"
|
||||
@@ -588,10 +618,10 @@
|
||||
"message": "Monitoramento de atividades"
|
||||
},
|
||||
"app-marketing.features.performance.cpu-percent": {
|
||||
"message": "Uso de CPU"
|
||||
"message": "% CPU"
|
||||
},
|
||||
"app-marketing.features.performance.description": {
|
||||
"message": "O Modrinth App tem um desempenho melhor que muitos dos principais gerenciadores de mods, usando apenas 150 MB de RAM!"
|
||||
"message": "O Modrinth App desempenha melhor que muitos outros gerenciadores de mods, usando apenas 150 MB de RAM!"
|
||||
},
|
||||
"app-marketing.features.performance.discord": {
|
||||
"message": "Discord"
|
||||
@@ -624,19 +654,19 @@
|
||||
"message": "RAM"
|
||||
},
|
||||
"app-marketing.features.performance.small": {
|
||||
"message": "Pequeno"
|
||||
"message": "Pouco"
|
||||
},
|
||||
"app-marketing.features.performance.title": {
|
||||
"message": "Desempenho"
|
||||
"message": "Eficiente"
|
||||
},
|
||||
"app-marketing.features.play.description": {
|
||||
"message": "Use o Modrinth App para baixar e jogar seus mods e pacotes de mods favoritos."
|
||||
"message": "Use o Modrinth App para instalar e jogar com seus mods e pacotes de mods favoritos."
|
||||
},
|
||||
"app-marketing.features.play.title": {
|
||||
"message": "Jogue com os seus mods favoritos"
|
||||
"message": "Jogue com seus mods favoritos"
|
||||
},
|
||||
"app-marketing.features.sharing.description": {
|
||||
"message": "Crie, compartilhe e jogue com qualquer um dos milhares de mods e pacotes de mods hospedados aqui no Modrinth."
|
||||
"message": "Crie, compartilhe e jogue com pacotes de mods com qualquer um de milhares de mods e pacotes de mods hospedados aqui."
|
||||
},
|
||||
"app-marketing.features.sharing.modpack": {
|
||||
"message": "Pacote de mods"
|
||||
@@ -651,7 +681,7 @@
|
||||
"message": "Diferente de qualquer launcher"
|
||||
},
|
||||
"app-marketing.features.website.description": {
|
||||
"message": "O Modrinth App é totalmente integrado com o site, permitindo que você acesse todos os seus projetos favoritos pelo aplicativo!"
|
||||
"message": "O Modrinth App é totalmente integrado com o site, para você conseguir acessar seus projetos favoritos do aplicativo!"
|
||||
},
|
||||
"app-marketing.features.website.title": {
|
||||
"message": "Integração com o site"
|
||||
@@ -660,10 +690,10 @@
|
||||
"message": "que você já usou antes"
|
||||
},
|
||||
"app-marketing.hero.app-screenshot-alt": {
|
||||
"message": "Captura de tela do Modrinth App com uma instância do Cobblemon aberta na página \"Conteúdo\"."
|
||||
"message": "Uma captura de tela do Modrinth App com uma instância do Cobblemon aberta na página 'Conteúdo'."
|
||||
},
|
||||
"app-marketing.hero.description": {
|
||||
"message": "O Modrinth App é um launcher de código aberto que permite jogar seus mods favoritos e mantê-los sempre atualizados, tudo em um só lugar."
|
||||
"message": "O Modrinth App é um launcher de código aberto que permite jogar com seus mods favoritos e mantê-los sempre atualizados, tudo em um só lugar."
|
||||
},
|
||||
"app-marketing.hero.download-button": {
|
||||
"message": "Baixar Modrinth App"
|
||||
@@ -684,7 +714,7 @@
|
||||
"message": "Ocultar outros pacotes"
|
||||
},
|
||||
"app-marketing.not-recommended": {
|
||||
"message": "Não recomendamos que você os utilize, a menos que saiba o que está fazendo."
|
||||
"message": "Não é recomendado usá-los, a menos que saiba o que está fazendo."
|
||||
},
|
||||
"app-marketing.show-other-packages": {
|
||||
"message": "Mostrar outros pacotes"
|
||||
@@ -702,7 +732,7 @@
|
||||
"message": "Autorizar {appName}"
|
||||
},
|
||||
"auth.authorize.error.no-redirect-url": {
|
||||
"message": "Nenhum redirecionamento encontrado na resposta"
|
||||
"message": "Sem redirecionamento encontrado na resposta"
|
||||
},
|
||||
"auth.authorize.redirect-url": {
|
||||
"message": "Você será redirecionado para <redirect-url>{url}</redirect-url>"
|
||||
@@ -711,7 +741,7 @@
|
||||
"message": "Enviar e-mail de recuperação"
|
||||
},
|
||||
"auth.reset-password.method-choice.description": {
|
||||
"message": "Insira seu e-mail abaixo e enviaremos um link de recuperação para que você possa recuperar sua conta."
|
||||
"message": "Insira seu e-mail abaixo e enviaremos um link de recuperação para ajudá-lo a recuperar sua conta."
|
||||
},
|
||||
"auth.reset-password.notification.email-sent.text": {
|
||||
"message": "Um e-mail com instruções foi enviado a você se o e-mail foi salvo anteriormente em sua conta."
|
||||
@@ -720,19 +750,19 @@
|
||||
"message": "E-mail enviado"
|
||||
},
|
||||
"auth.reset-password.notification.password-reset.text": {
|
||||
"message": "Agora você pode fazer login na sua conta com sua nova senha."
|
||||
"message": "Agora você pode iniciar sessão em sua conta com a nova senha."
|
||||
},
|
||||
"auth.reset-password.notification.password-reset.title": {
|
||||
"message": "Sua senha foi redefinida com sucesso"
|
||||
},
|
||||
"auth.reset-password.post-challenge.action": {
|
||||
"message": "Redefenir senha"
|
||||
"message": "Redefinir senha"
|
||||
},
|
||||
"auth.reset-password.post-challenge.confirm-password.label": {
|
||||
"message": "Confirmar senha"
|
||||
},
|
||||
"auth.reset-password.post-challenge.description": {
|
||||
"message": "Entre com sua nova senha para ter acesso a sua conta."
|
||||
"message": "Insira sua nova senha abaixo para ter acesso à conta."
|
||||
},
|
||||
"auth.reset-password.title": {
|
||||
"message": "Redefinir senha"
|
||||
@@ -759,7 +789,7 @@
|
||||
"message": "Iniciar sessão"
|
||||
},
|
||||
"auth.sign-in.use-password": {
|
||||
"message": "Ou com senha"
|
||||
"message": "Ou use a senha"
|
||||
},
|
||||
"auth.sign-up.action.create-account": {
|
||||
"message": "Criar conta"
|
||||
@@ -768,22 +798,22 @@
|
||||
"message": "Ao criar uma conta, você concorda com os <terms-link>Termos</terms-link> e a <privacy-policy-link>Política de Privacidade</privacy-policy-link>."
|
||||
},
|
||||
"auth.sign-up.notification.password-mismatch.text": {
|
||||
"message": "As senhas não estão iguais!"
|
||||
"message": "As senhas não correspondem!"
|
||||
},
|
||||
"auth.sign-up.sign-in-option.title": {
|
||||
"message": "Já possui uma conta?"
|
||||
},
|
||||
"auth.sign-up.subscribe.label": {
|
||||
"message": "Inscreva-se para receber atualizações sobre o Modrinth"
|
||||
"message": "Inscreva-se para receber novidades do Modrinth"
|
||||
},
|
||||
"auth.sign-up.title": {
|
||||
"message": "Entrar"
|
||||
"message": "Criar conta"
|
||||
},
|
||||
"auth.sign-up.title.create-account": {
|
||||
"message": "Ou crie uma conta você mesmo"
|
||||
},
|
||||
"auth.sign-up.title.sign-up-with": {
|
||||
"message": "Entrar com"
|
||||
"message": "Criar conta com"
|
||||
},
|
||||
"auth.verify-email.action.account-settings": {
|
||||
"message": "Configuração da conta"
|
||||
@@ -2963,6 +2993,9 @@
|
||||
"profile.official-account.bio": {
|
||||
"message": "Conta oficial do Modrinth. Obtenha suporte em<support-link></support-link> ou por e-mail via <email></email>"
|
||||
},
|
||||
"profile.stats.projects-followers": {
|
||||
"message": "{count, plural, =0 {{count} seguidores} one {<stat>{count}</stat> seguidor} other {<stat>{count}</stat> seguidores}} do projeto"
|
||||
},
|
||||
"profile.user-id": {
|
||||
"message": "ID do usuário: {id}"
|
||||
},
|
||||
@@ -3290,9 +3323,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "Se precisar de ajuda ou tiver dúvidas adicionais, visite a <help-center-link>Central de Ajuda do Modrinth</help-center-link> e clique no balão azul para entrar em contato com o suporte."
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "Exibir interface do membro"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "Este é um tópico de conversa privada com os moderadores do Modrinth. Eles podem entrar em contato com você para tratar de assuntos relacionados a este projeto."
|
||||
},
|
||||
@@ -3407,6 +3437,12 @@
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Visitar painel de projetos"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count, plural, =0 {Nenhum download} one {# download} other {# downloads}}"
|
||||
},
|
||||
"project.stats.followers-label": {
|
||||
"message": "{count, plural, =0 {Nenhum seguidor} one {# seguidor} other {# seguidores}}"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} foi arquivado. {title} não receberá atualizações a menos que o autor decida desarquivar o projeto."
|
||||
},
|
||||
@@ -3416,9 +3452,6 @@
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, one {Esta versão está atualmente retida e não listada} other {Estas versões estão atualmente retidas e não listadas}} publicamente. Por favor, forneça prova de que você tem permissão para redistribuir certos arquivos incluídos {count, plural, one {na versão} other {nas versões}} do pacote de mods."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "Resolver"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural,one {Versão {version_name} retida} other {Versões retidas}} por conteúdo incluso desconhecido"
|
||||
},
|
||||
|
||||
@@ -431,6 +431,9 @@
|
||||
"create.collection.title": {
|
||||
"message": "Criar uma coleção"
|
||||
},
|
||||
"create.limit-alert.approaching-limit-description": {
|
||||
"message": "Estás prestes a atingir o limite de {typePlural}, por favor contacta o suporte se precisas de mais do que {max} {typePlural}."
|
||||
},
|
||||
"create.limit-alert.contact-support": {
|
||||
"message": "Contacta o suporte"
|
||||
},
|
||||
|
||||
@@ -1325,6 +1325,9 @@
|
||||
"project-member-header.invitation-title": {
|
||||
"message": "Invitație de a te alătura proiectului"
|
||||
},
|
||||
"project-member-header.invitation-with-role": {
|
||||
"message": "Ai fost invitat să devii membru al acestui proiect cu rolul de '{role}''."
|
||||
},
|
||||
"project-member-header.success-decline": {
|
||||
"message": "Ai refuzat invitația în echipă"
|
||||
},
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "Загрузчик"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "Участник"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "Монетизация"
|
||||
},
|
||||
@@ -104,6 +107,9 @@
|
||||
"analytics.chart.empty.select-table-items": {
|
||||
"message": "Выберите элементы из таблицы ниже, чтобы отобразить данные."
|
||||
},
|
||||
"analytics.chart.events.count-aria": {
|
||||
"message": "{count, plural, one {# событие аналитики} few {# события аналитики} other {# событий аналитики}}"
|
||||
},
|
||||
"analytics.chart.events.project-title": {
|
||||
"message": "<project>{projectName}</project>: {title}"
|
||||
},
|
||||
@@ -125,6 +131,33 @@
|
||||
"analytics.chart.render-limit.description": {
|
||||
"message": "Если показать все выбранные строки, страница может работать медленнее."
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "Показаны все {itemType, select,\n project {проекты}\n country {страны}\n monetization {типы монетизации}\n downloadSource {источники скачивания}\n downloadReason {причины скачивания}\n member {участники}\n projectVersion {версии проекта}\n loader {загрузчики}\n gameVersion {версии игры}\n other {элементы}\n} из таблицы"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "{itemType, select,\n project {{count, plural, one {Показан # проект} few {Показано # проекта} other {Показано # проектов}}}\n country {{count, plural, one {Показана # страна} few {Показано # страны} other {Показано # стран}}}\n monetization {{count, plural, one {Показан # тип монетизации} few {Показано # типа монетизации} other {Показано # типов монетизации}}}\n downloadSource {{count, plural, one {Показан # источник скачивания} few {Показано # источника скачивания} other {Показано # источников скачивания}}}\n downloadReason {{count, plural, one {Показана # причина скачивания} few {Показано # причины скачивания} other {Показано # причин скачивания}}}\n member {{count, plural, one {Показан # участник} few {Показано # участника} other {Показано # участников}}}\n projectVersion {{count, plural, one {Показана # версия проекта} few {Показано # версии проекта} other {Показано # версий проекта}}}\n loader {{count, plural, one {Показан # загрузчик} few {Показано # загрузчика} other {Показано # загрузчиков}}}\n gameVersion {{count, plural, one {Показана # версия игры} few {Показано # версии игры} other {Показано # версий игры}}}\n other {{count, plural, one {Показан # элемент} few {Показано # элемента} other {Показано # элементов}}}\n} из таблицы"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "{itemType, select,\n project {{limit, plural, one {Показан # проект} few {Показано # проекта} other {Показано # проектов}}}\n country {{limit, plural, one {Показана # страна} few {Показано # страны} other {Показано # стран}}}\n monetization {{limit, plural, one {Показан # тип монетизации} few {Показано # типа монетизации} other {Показано # типов монетизации}}}\n downloadSource {{limit, plural, one {Показан # источник скачивания} few {Показано # источника скачивания} other {Показано # источников скачивания}}}\n downloadReason {{limit, plural, one {Показана # причина скачивания} few {Показано # причины скачивания} other {Показано # причин скачивания}}}\n member {{limit, plural, one {Показан # участник} few {Показано # участника} other {Показано # участников}}}\n projectVersion {{limit, plural, one {Показана # версия проекта} few {Показано # версии проекта} other {Показано # версий проекта}}}\n loader {{limit, plural, one {Показан # загрузчик} few {Показано # загрузчика} other {Показано # загрузчиков}}}\n gameVersion {{limit, plural, one {Показана # версия игры} few {Показано # версии игры} other {Показано # версий игры}}}\n other {{limit, plural, one {Показан # элемент} few {Показано # элемента} other {Показано # элементов}}}\n} из таблицы"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "Показан топ‑{count} {itemType, select,\n project {проектов}\n country {стран}\n monetization {типов монетизации}\n downloadSource {источников скачивания}\n downloadReason {причин скачивания}\n member {участников}\n projectVersion {версий проекта}\n loader {загрузчиков}\n gameVersion {версий игры}\n other {элементов}\n} из таблицы"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-on-project": {
|
||||
"message": "Зависит от {project}"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-project-version": {
|
||||
"message": "{dependentProject} зависит от {dependencyProject} версии {version}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# день} few {# дня} other {# дней}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.hours": {
|
||||
"message": "{count, plural, one {# час} few {# часа} other {# часов}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.minutes": {
|
||||
"message": "{count, plural, one {# минута} few {# минуты} other {# минут}}"
|
||||
},
|
||||
"analytics.chart.tooltip.hide-entry": {
|
||||
"message": "Скрыть {name} на диаграмме"
|
||||
},
|
||||
@@ -200,9 +233,15 @@
|
||||
"analytics.filter.search.countries": {
|
||||
"message": "Поиск стран..."
|
||||
},
|
||||
"analytics.filter.search.dependent-projects": {
|
||||
"message": "Поиск проектов..."
|
||||
},
|
||||
"analytics.filter.search.download-sources": {
|
||||
"message": "Поиск источников..."
|
||||
},
|
||||
"analytics.filter.search.members": {
|
||||
"message": "Поиск участников..."
|
||||
},
|
||||
"analytics.filter.search.project-versions": {
|
||||
"message": "Поиск версий проекта..."
|
||||
},
|
||||
@@ -311,6 +350,9 @@
|
||||
"analytics.project.all": {
|
||||
"message": "Все проекты"
|
||||
},
|
||||
"analytics.project.count": {
|
||||
"message": "{count, plural, one {# проект} few {# проекта} other {# проектов}}"
|
||||
},
|
||||
"analytics.project.icon-alt": {
|
||||
"message": "Иконка {name}"
|
||||
},
|
||||
@@ -387,13 +429,22 @@
|
||||
"message": "Время игры (в секундах)"
|
||||
},
|
||||
"analytics.table.csv.selected-range": {
|
||||
"message": "Выбранный диапазон"
|
||||
"message": "в выбранном диапазоне"
|
||||
},
|
||||
"analytics.table.duration.days": {
|
||||
"message": "{count, plural, one {# день} few {# дня} other {# дней}}"
|
||||
},
|
||||
"analytics.table.duration.hours": {
|
||||
"message": "{count, plural, one {# час} few {# часа} other {# часов}}"
|
||||
},
|
||||
"analytics.table.duration.minutes": {
|
||||
"message": "{count, plural, one {# минута} few {# минуты} other {# минут}}"
|
||||
},
|
||||
"analytics.table.empty.no-matching-rows": {
|
||||
"message": "Нет данных по этому запросу"
|
||||
},
|
||||
"analytics.table.export-csv": {
|
||||
"message": "Экспорт в CSV"
|
||||
"message": "Экспортировать в CSV"
|
||||
},
|
||||
"analytics.table.export.cumulative": {
|
||||
"message": "С накоплением"
|
||||
@@ -402,7 +453,7 @@
|
||||
"message": "С группировкой: {groupBy}"
|
||||
},
|
||||
"analytics.table.pagination.summary": {
|
||||
"message": "Показано с {start} по {end} из {total}"
|
||||
"message": "Показано с {start} по {end} из {total}"
|
||||
},
|
||||
"analytics.table.search.placeholder": {
|
||||
"message": "Поиск..."
|
||||
@@ -437,6 +488,9 @@
|
||||
"analytics.value.monetized": {
|
||||
"message": "С монетизацией"
|
||||
},
|
||||
"analytics.value.no-dependent": {
|
||||
"message": "Нет"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "Нет"
|
||||
},
|
||||
@@ -989,6 +1043,9 @@
|
||||
"create.limit-alert.approaching-limit": {
|
||||
"message": "Почти исчерпан лимит {type} ({current}/{max})"
|
||||
},
|
||||
"create.limit-alert.approaching-limit-description": {
|
||||
"message": "Почти достигнут лимит в {max} {type}. Увеличьте его, обратившись в поддержку."
|
||||
},
|
||||
"create.limit-alert.contact-support": {
|
||||
"message": "Связаться с поддержкой"
|
||||
},
|
||||
@@ -1124,6 +1181,9 @@
|
||||
"dashboard.affiliate-links.search": {
|
||||
"message": "Поиск ссылок..."
|
||||
},
|
||||
"dashboard.analytics.from-projects": {
|
||||
"message": "с {count, plural, one {# проекта} other {# проектов}}"
|
||||
},
|
||||
"dashboard.analytics.total-downloads": {
|
||||
"message": "Всего скачиваний"
|
||||
},
|
||||
@@ -1145,6 +1205,9 @@
|
||||
"dashboard.collections.empty.no-match-hint": {
|
||||
"message": "Попробуйте изменить фильтры или запрос."
|
||||
},
|
||||
"dashboard.collections.label.projects-count": {
|
||||
"message": "{count} {countPlural, plural, one {проект} few {проекта} other {проектов}}"
|
||||
},
|
||||
"dashboard.collections.label.search-input": {
|
||||
"message": "Поиск по коллекциям"
|
||||
},
|
||||
@@ -1416,22 +1479,22 @@
|
||||
"message": "Достигнут лимит вывода в <b>{withdrawLimit}</b>. Для снятия лимита заполните налоговую форму."
|
||||
},
|
||||
"dashboard.discord-roles.banner.body": {
|
||||
"message": "Привяжите ваш аккаунт Discord через Modrinth для синхронизации следующих ролей: {roles}."
|
||||
"message": "Вам доступны роли за {roles}. Привяжите Discord к аккаунту Modrinth, чтобы синхронизировать роли."
|
||||
},
|
||||
"dashboard.discord-roles.banner.cta": {
|
||||
"message": "Привязать Discord"
|
||||
},
|
||||
"dashboard.discord-roles.banner.title": {
|
||||
"message": "Получите ваши роли Discord"
|
||||
"message": "Получите роли в Discord"
|
||||
},
|
||||
"dashboard.discord-roles.role.big-creator": {
|
||||
"message": ">1 млн скачиваний"
|
||||
"message": "1 млн скачиваний"
|
||||
},
|
||||
"dashboard.discord-roles.role.creator": {
|
||||
"message": "Автор"
|
||||
"message": "статус автора"
|
||||
},
|
||||
"dashboard.discord-roles.role.pride": {
|
||||
"message": "Pride 2026"
|
||||
"message": "поддержку ЛГБТК+"
|
||||
},
|
||||
"dashboard.head-title": {
|
||||
"message": "Панель управления"
|
||||
@@ -1445,6 +1508,9 @@
|
||||
"dashboard.notifications.link.view-history": {
|
||||
"message": "История уведомлений"
|
||||
},
|
||||
"dashboard.notifications.link.view-more": {
|
||||
"message": "Посмотреть ещё {extraNotifs, number}"
|
||||
},
|
||||
"dashboard.organizations.button.create": {
|
||||
"message": "Создать организацию"
|
||||
},
|
||||
@@ -1454,6 +1520,9 @@
|
||||
"dashboard.organizations.error.fetch": {
|
||||
"message": "Не удалось получить организации"
|
||||
},
|
||||
"dashboard.organizations.member-count": {
|
||||
"message": "{count, plural, one {# участник} few {# участника} other {# участников}}"
|
||||
},
|
||||
"dashboard.organizations.title": {
|
||||
"message": "Организации"
|
||||
},
|
||||
@@ -1479,7 +1548,7 @@
|
||||
"message": "Загрузка уведомлений..."
|
||||
},
|
||||
"dashboard.projects.bulk-edit-hint": {
|
||||
"message": "Вы можете редактировать сразу несколько проектов, выбрав их ниже."
|
||||
"message": "Можно редактировать сразу несколько проектов, выбрав их ниже."
|
||||
},
|
||||
"dashboard.projects.bulk-edit.server-disabled": {
|
||||
"message": "Серверные проекты не поддерживают массовое редактирование"
|
||||
@@ -1554,7 +1623,7 @@
|
||||
"message": "Модераторы оставили сообщение к проекту. Перейдите на страницу проекта, чтобы узнать подробности."
|
||||
},
|
||||
"dashboard.projects.project.review-environment-metadata": {
|
||||
"message": "Пожалуйста, проверьте файл metadata"
|
||||
"message": "Проверьте метаданные среды"
|
||||
},
|
||||
"dashboard.projects.sort.ascending": {
|
||||
"message": "По возрастанию"
|
||||
@@ -2837,6 +2906,9 @@
|
||||
"profile.button.set-affiliate": {
|
||||
"message": "Сделать партнёром"
|
||||
},
|
||||
"profile.collection.projects-count": {
|
||||
"message": "{count, plural, one {# проект} few {# проекта} other {# проектов}}"
|
||||
},
|
||||
"profile.details.label.auth-providers": {
|
||||
"message": "Сервисы входа"
|
||||
},
|
||||
@@ -2862,7 +2934,7 @@
|
||||
"message": "Почта подтверждена"
|
||||
},
|
||||
"profile.error.not-found": {
|
||||
"message": "Пользователь не найден"
|
||||
"message": "Пользователь не найден"
|
||||
},
|
||||
"profile.label.affiliate": {
|
||||
"message": "Партнёр"
|
||||
@@ -2873,6 +2945,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Коллекция"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, one {скачивание} few {скачивания} other {скачиваний}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Регистрация:"
|
||||
},
|
||||
@@ -2891,6 +2966,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Организации"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, one {проект} few {проекта} other {проектов}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Сохранение..."
|
||||
},
|
||||
@@ -2906,6 +2984,9 @@
|
||||
"profile.official-account.bio": {
|
||||
"message": "Официальный аккаунт Modrinth. Связаться с поддержкой можно по ссылке <support-link></support-link> или по электронной почте: <email></email>"
|
||||
},
|
||||
"profile.stats.projects-followers": {
|
||||
"message": "{count, plural, one {<stat>{count}</stat> подписчик} few {<stat>{count}</stat> подписчика} other {<stat>{count}</stat> подписчиков}} у проектов"
|
||||
},
|
||||
"profile.user-id": {
|
||||
"message": "ID пользователя: {id}"
|
||||
},
|
||||
@@ -3233,9 +3314,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "Если вам нужна помощь или у вас есть дополнительные вопросы, посетите <help-center-link>справочный центр Modrinth</help-center-link> и нажмите на синий значок, чтобы обратиться в поддержку."
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "Показать интерфейс участника"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "Это приватная переписка с модераторами Modrinth. Они могут связываться с вами по вопросам, связанным с этим проектом."
|
||||
},
|
||||
@@ -3350,6 +3428,12 @@
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Управление проектами"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count, plural, one {загрузка} few {загрузки} other {загрузок}}"
|
||||
},
|
||||
"project.stats.followers-label": {
|
||||
"message": "{count, plural, one {подписчик} few {подписчика} other {подписчиков}}"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} помещён в архив. {title} больше не будет получать обновления, если только автор не решит разархивировать проект."
|
||||
},
|
||||
@@ -3359,9 +3443,6 @@
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, one {Эта версия в настоящее время скрыта и не отображается} other {Эти версии в настоящее время скрыты и не отображаются}} в публичном списке. Пожалуйста, предоставьте доказательства того, что у вас есть разрешение на распространение определённых файлов, включённых в {count, plural, one {эту версию} other {эти версии}}."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "Решить"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, one {Версия {version_name} скрыта} other {Версии скрыты}} из-за неизвестного встроенного контента"
|
||||
},
|
||||
|
||||
@@ -515,6 +515,9 @@
|
||||
"profile.meta.description-with-bio": {
|
||||
"message": "{bio} - Preuzmite projekte korisnika {username} na Modrinthu"
|
||||
},
|
||||
"profile.stats.projects-followers": {
|
||||
"message": "{count, plural, one {<stat>{count}</stat> pratilac projekta} few {<stat>{count}</stat> pratioca projekta} other {<stat>{count}</stat> pratilaca projekta}}"
|
||||
},
|
||||
"profile.user-id": {
|
||||
"message": "ID korisnika: {id}"
|
||||
},
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
"analytics.breakdown.country": {
|
||||
"message": "Land"
|
||||
},
|
||||
"analytics.breakdown.dependent-on": {
|
||||
"message": "Beroende på"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "Nedladdningsanledning"
|
||||
},
|
||||
@@ -38,6 +41,9 @@
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "Laddare"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "Medlem"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "Intäkter"
|
||||
},
|
||||
@@ -59,6 +65,9 @@
|
||||
"analytics.chart.action.show-all": {
|
||||
"message": "Visa alla"
|
||||
},
|
||||
"analytics.chart.action.show-limited": {
|
||||
"message": "Visa begränsad"
|
||||
},
|
||||
"analytics.chart.action.show-top-eight": {
|
||||
"message": "Visa topp 8"
|
||||
},
|
||||
@@ -95,21 +104,15 @@
|
||||
"analytics.chart.events.project-title": {
|
||||
"message": "<project>{projectName}</project>: {title}"
|
||||
},
|
||||
"analytics.chart.events.see-announcement": {
|
||||
"message": "Se meddelande"
|
||||
},
|
||||
"analytics.chart.legend.previous-period-suffix": {
|
||||
"message": "{name} (förhandsvisa)"
|
||||
},
|
||||
"analytics.chart.render-limit.header": {
|
||||
"message": "Visa alla {count} linjer i diagram?"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "Visar {count} {itemType, select, project {projekt} country {{count, plural, one {land} other {länder}}} monetization {{count, plural, one {intäktvärde} other {intäktvärden}}} downloadSource {{count, plural, one {nedladdningskälla} other {nedladdningskällor}}} downloadReason {{count, plural, one {nedladdningsanledning} other {nedladdningsanledningar}}} projectVersion {{count, plural, one {projektversion} other {projektversioner}}} loader {laddare} gameVersion {{count, plural, one {spelversion} other {spelversioner}}} other {föremål}} från tabell"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "Visar {limit} {itemType, select, project {projekt} country {{limit, plural, one {land} other {länder}}} monetization {{limit, plural, one {intäktvärde} other {intäktvärden}}} downloadSource {{limit, plural, one {nedladdningskälla} other {nedladdningskällor}}} downloadReason {{limit, plural, one {nedladdningsanledning} other {nedladdningsanledningar}}} projectVersion {{limit, plural, one {projektversion} other {projektversioner}}} loader {laddare} gameVersion {{limit, plural, one {spelversion} other {spelversioner}}} other {föremål}} från tabell"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "Visar topp {count} {itemType, select, project {projekt} country {{count, plural, one {land} other {länder}}} monetization {{count, plural, one {intäktvärde} other {intäktvärden}}} downloadSource {{count, plural, one {nedladdningskälla} other {nedladdningskällor}}} downloadReason {{count, plural, one {nedladdningsanledning} other {nedladdningsanledningar}}} projectVersion {{count, plural, one {projektversion} other {projektversioner}}}loader {laddare} gameVersion {{count, plural, one {spelversion} other {spelversioner}}} other {föremål}} från tabell"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# dag} other {# dagar}}"
|
||||
},
|
||||
@@ -293,6 +296,9 @@
|
||||
"analytics.project.all": {
|
||||
"message": "Alla projekt"
|
||||
},
|
||||
"analytics.project.count": {
|
||||
"message": "{count, number} projekt"
|
||||
},
|
||||
"analytics.project.icon-alt": {
|
||||
"message": "{name} Ikon"
|
||||
},
|
||||
@@ -1430,6 +1436,9 @@
|
||||
"dashboard.projects.links.button.edit": {
|
||||
"message": "Ändra länkar"
|
||||
},
|
||||
"dashboard.projects.links.changes-applied": {
|
||||
"message": "Ändringar kommer appliceras till <strong>{count}</strong> projekt."
|
||||
},
|
||||
"dashboard.projects.links.discord-invite.label": {
|
||||
"message": "Discordinbjudan"
|
||||
},
|
||||
|
||||
@@ -8,6 +8,231 @@
|
||||
"admin.billing.error.not-found": {
|
||||
"message": "ไม่พบผู้ใช้นี้"
|
||||
},
|
||||
"analytics.action.add": {
|
||||
"message": "เพิ่ม"
|
||||
},
|
||||
"analytics.action.cancel": {
|
||||
"message": "ยกเลิก"
|
||||
},
|
||||
"analytics.action.refresh": {
|
||||
"message": "รีเฟรช"
|
||||
},
|
||||
"analytics.action.reset": {
|
||||
"message": "รีเซ็ต"
|
||||
},
|
||||
"analytics.breakdown.country": {
|
||||
"message": "ประเทศ"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "เหตุผลในการดาวน์โหลด"
|
||||
},
|
||||
"analytics.breakdown.download-source": {
|
||||
"message": "แหล่งที่มาของการดาวน์โหลด"
|
||||
},
|
||||
"analytics.breakdown.game-version": {
|
||||
"message": "เวอร์ชันของเกม"
|
||||
},
|
||||
"analytics.breakdown.generic": {
|
||||
"message": "รายละเอียดจำแนกตาม"
|
||||
},
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "โหลดเดอร์"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "การสร้างรายได้"
|
||||
},
|
||||
"analytics.breakdown.none.selected": {
|
||||
"message": "ไม่มีรายละเอียดการจำแนก"
|
||||
},
|
||||
"analytics.breakdown.project": {
|
||||
"message": "โปรเจกต์"
|
||||
},
|
||||
"analytics.breakdown.project-status": {
|
||||
"message": "สถานะของโปรเจกต์"
|
||||
},
|
||||
"analytics.breakdown.project-version": {
|
||||
"message": "เวอร์ชั่นของโปรเจกต์"
|
||||
},
|
||||
"analytics.breakdown.selected": {
|
||||
"message": "การแยกตาม {breakdown}"
|
||||
},
|
||||
"analytics.chart.action.show-all": {
|
||||
"message": "แสดงทั้งหมด"
|
||||
},
|
||||
"analytics.chart.action.show-limited": {
|
||||
"message": "แสดงแบบจำกัด"
|
||||
},
|
||||
"analytics.chart.action.show-top-eight": {
|
||||
"message": "แสดง 8 อันดับแรก"
|
||||
},
|
||||
"analytics.chart.axis.playtime-hours": {
|
||||
"message": "{hours} ชั่วโมง"
|
||||
},
|
||||
"analytics.chart.controls.active-count": {
|
||||
"message": "{count} กำลังเล่นอยู่"
|
||||
},
|
||||
"analytics.chart.controls.annotations": {
|
||||
"message": "คำอธิบายประกอบ"
|
||||
},
|
||||
"analytics.chart.controls.aria": {
|
||||
"message": "ตัวควบคุมกราฟวิเคราะห์, {activeCount}"
|
||||
},
|
||||
"analytics.chart.controls.button": {
|
||||
"message": "ส่วนควบคุม"
|
||||
},
|
||||
"analytics.chart.controls.dialog-aria": {
|
||||
"message": "การควบคุมกราฟการวิเคราะห์"
|
||||
},
|
||||
"analytics.chart.controls.display": {
|
||||
"message": "การแสดงผล"
|
||||
},
|
||||
"analytics.chart.controls.modrinth-events": {
|
||||
"message": "เหตุการณ์จาก Modrinth"
|
||||
},
|
||||
"analytics.chart.controls.no-modrinth-events": {
|
||||
"message": "ไม่มีเหตุการณ์จาก Modrinth ในกราฟ"
|
||||
},
|
||||
"analytics.chart.controls.no-project-events": {
|
||||
"message": "ไม่มีเหตุการณ์ของโปรเจกต์ในกราฟ"
|
||||
},
|
||||
"analytics.chart.controls.previous-period": {
|
||||
"message": "ช่วงเวลาก่อนหน้า"
|
||||
},
|
||||
"analytics.chart.controls.project-events": {
|
||||
"message": "กิจกรรมโปรเจกต์"
|
||||
},
|
||||
"analytics.chart.controls.ratio": {
|
||||
"message": "อัตราส่วน"
|
||||
},
|
||||
"analytics.chart.empty.select-table-items": {
|
||||
"message": "เลือกรายการจากตารางด้านล่างเพื่อแสดงข้อมูลของคุณ"
|
||||
},
|
||||
"analytics.chart.events.project-title": {
|
||||
"message": "<project>{projectName}</project>: {title}"
|
||||
},
|
||||
"analytics.chart.events.see-announcement": {
|
||||
"message": "ดูประกาศ"
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.aria": {
|
||||
"message": "ดูรายละเอียดการวิเคราะห์ที่สร้างรายได้"
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.description": {
|
||||
"message": "มีเพียงการดูและการดาวน์โหลดที่ทำผ่าน Modrinth เท่านั้นที่จะนับรวมเพื่อการสร้างรายได้ และการดาวน์โหลดต้องให้ผู้ใช้เข้าสู่ระบบก่อน"
|
||||
},
|
||||
"analytics.chart.legend.monetization-details.title": {
|
||||
"message": "ข้อมูลวิเคราะห์การสร้างรายได้"
|
||||
},
|
||||
"analytics.chart.legend.previous-period-suffix": {
|
||||
"message": "{name} (ก่อนหน้า)"
|
||||
},
|
||||
"analytics.chart.render-limit.description": {
|
||||
"message": "การแสดงเส้นกราฟที่เลือกทั้งหมดจากตาราง อาจทำให้หน้าเว็บทำงานช้าลง"
|
||||
},
|
||||
"analytics.chart.render-limit.header": {
|
||||
"message": "แสดงเส้นกราฟทั้ง {count} เส้นหรือไม่?"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# วัน} other {# วัน}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.hours": {
|
||||
"message": "{count, plural, one {# ชั่วโมง} other {# ชั่วโมง}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.minutes": {
|
||||
"message": "{count, plural, one {# นาที} other {# นาที}}"
|
||||
},
|
||||
"analytics.chart.tooltip.hide-entry": {
|
||||
"message": "ซ่อน {name} ในกราฟ"
|
||||
},
|
||||
"analytics.chart.tooltip.pinned": {
|
||||
"message": "ปักหมุดคำแนะนำบนกราฟแล้ว"
|
||||
},
|
||||
"analytics.chart.tooltip.pinned-aria": {
|
||||
"message": "ปักหมุดแล้ว"
|
||||
},
|
||||
"analytics.chart.tooltip.previous-period-short": {
|
||||
"message": "(ก่อนหน้า)"
|
||||
},
|
||||
"analytics.chart.tooltip.show-entry": {
|
||||
"message": "แสดง {name} ในกราฟ"
|
||||
},
|
||||
"analytics.chart.tooltip.total": {
|
||||
"message": "ทั้งหมด"
|
||||
},
|
||||
"analytics.chart.view.area": {
|
||||
"message": "ขอบเขต"
|
||||
},
|
||||
"analytics.chart.view.bar": {
|
||||
"message": "แผนภูมิแท่ง"
|
||||
},
|
||||
"analytics.chart.view.line": {
|
||||
"message": "แผนภูมิเส้น"
|
||||
},
|
||||
"analytics.download-reason.dependency": {
|
||||
"message": "ม็อดเสริมที่จำเป็น"
|
||||
},
|
||||
"analytics.download-reason.modpack": {
|
||||
"message": "ม็อดแพ็ก"
|
||||
},
|
||||
"analytics.download-reason.standalone": {
|
||||
"message": "แบบแยกต่างหาก"
|
||||
},
|
||||
"analytics.download-reason.update": {
|
||||
"message": "อัปเดต"
|
||||
},
|
||||
"analytics.download-source.app": {
|
||||
"message": "แอป Modrinth"
|
||||
},
|
||||
"analytics.download-source.website": {
|
||||
"message": "เว็ปไซต์ Modrinth"
|
||||
},
|
||||
"analytics.project.user": {
|
||||
"message": "โปรเจกต์ของ {username}"
|
||||
},
|
||||
"analytics.project.your": {
|
||||
"message": "โปรเจกต์ของคุณ"
|
||||
},
|
||||
"analytics.query.filter.add": {
|
||||
"message": "เพิ่มตัวกรอง"
|
||||
},
|
||||
"analytics.query.label.breakdown": {
|
||||
"message": "รายละเอียดจำแนก:"
|
||||
},
|
||||
"analytics.query.label.grouped-by": {
|
||||
"message": "จัดกลุ่มโดย"
|
||||
},
|
||||
"analytics.query.label.project": {
|
||||
"message": "โปรเจกต์:"
|
||||
},
|
||||
"analytics.query.label.timeframe": {
|
||||
"message": "ช่วงเวลา:"
|
||||
},
|
||||
"analytics.stat.downloads": {
|
||||
"message": "ดาวน์โหลด"
|
||||
},
|
||||
"analytics.stat.monetization-banner.body": {
|
||||
"message": "เฉพาะยอดเข้าชมและยอดดาวน์โหลดที่ทำผ่าน Modrinth เท่านั้นที่มีสิทธิ์นำไปคิดสร้างรายได้ และจะต้องผ่านระบบกรองป้องกันการทุจริตด้วย นอกจากนี้ การดาวน์โหลดผ่านแอป Modrinth ยังกำหนดให้ผู้ใช้งานต้องเข้าสู่ระบบไว้ด้วยเช่นกัน เนื่องจากทุกๆ โปรเจกต์ต่างก็มีสัดส่วนของยอดดาวน์โหลดที่สร้างรายได้ในระดับที่ใกล้เคียงกัน ดังนั้น รายได้ของคุณจะไม่เปลี่ยนแปลงไปจากเดิมอย่างมีนัยสำคัญ ถึงแม้จะนับยอดดาวน์โหลดทั้งหมดก็ตาม"
|
||||
},
|
||||
"analytics.stat.monetization-banner.learn-more": {
|
||||
"message": "เรียนรู้เพิ่มเติม"
|
||||
},
|
||||
"analytics.stat.monetization-banner.title": {
|
||||
"message": "ระบบสร้างรายได้ทำงานอย่างไร?"
|
||||
},
|
||||
"analytics.stat.playtime": {
|
||||
"message": "เวลาเล่น"
|
||||
},
|
||||
"analytics.stat.playtime-hours": {
|
||||
"message": "{hours} ชั่วโมง"
|
||||
},
|
||||
"analytics.stat.previous-period-comparison": {
|
||||
"message": "เทียบกับช่วงเวลาก่อนหน้า"
|
||||
},
|
||||
"analytics.stat.previous-period-comparison-short": {
|
||||
"message": "เทียบกับก่อนหน้า"
|
||||
},
|
||||
"analytics.stat.revenue": {
|
||||
"message": "รายได้"
|
||||
},
|
||||
"app-marketing.download.description": {
|
||||
"message": "แอปเดสก์ท็อปของเราพร้อมใช้งานบนทุกแพลตฟอร์ม เลือกเวอร์ชันที่คุณต้องการได้เลย"
|
||||
},
|
||||
@@ -420,7 +645,7 @@
|
||||
"message": "ประเภท"
|
||||
},
|
||||
"create.project.type-project": {
|
||||
"message": "โปรเจ็ก"
|
||||
"message": "โปรเจกต์"
|
||||
},
|
||||
"create.project.type-server": {
|
||||
"message": "เซิร์ฟเวอร์"
|
||||
@@ -575,6 +800,9 @@
|
||||
"landing.notifications.heading": {
|
||||
"message": "การแจ้งเตือน"
|
||||
},
|
||||
"landing.notifications.received-time": {
|
||||
"message": ""
|
||||
},
|
||||
"settings.applications.button.upload-icon": {
|
||||
"message": "อัปโหลดไอคอน"
|
||||
},
|
||||
|
||||
@@ -134,18 +134,6 @@
|
||||
"analytics.chart.render-limit.header": {
|
||||
"message": "Grafikteki {count} satırın tümünü göstermek ister misiniz?"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "Tablodaki tüm {itemType, select, project {{count, plural, one {proje} other {projeler}}} country {{count, plural, one {ülke} other {ülkeler}}} monetization {{count, plural, one {gelir elde etme değeri} other {gelir elde etme değerleri}}} downloadSource {{count, plural, one {indirme kaynağı} other {indirme kaynakları}}} downloadReason {{count, plural, one {indirme nedeni} other {indirme nedenleri}}} projectVersion {{count, plural, one {proje sürümü} other {proje sürümleri}}} loader {{count, plural, one {yükleyici} other {yükleyiciler}}} gameVersion {{count, plural, one {oyun sürümü} other {oyun sürümleri}}} other {{count, plural, one {öğe} other {öğeler}}}} gösteriliyor"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "Tablodan {count} {itemType, select, project {{count, plural, one {proje} other {projeler}}} country {{count, plural, one {ülke} other {ülkeler}}} monetization {{count, plural, one {gelir elde etme değeri} other {gelir elde etme değerleri}}} downloadSource {{count, plural, one {indirme kaynağı} other {indirme kaynakları}}} downloadReason {{count, plural, one {indirme nedeni} other {indirme nedenleri}}} projectVersion {{count, plural, one {proje sürümü} other {proje sürümleri}}} loader {{count, plural, one {yükleyici} other {yükleyiciler}}} gameVersion {{count, plural, one {oyun sürümü} other {oyun sürümleri}}} other {{count, plural, one {öğe} other {öğeler}}}} seçildi"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "Tablodan {limit} {itemType, select, project {{limit, plural, one {proje} other {projeler}}} country {{limit, plural, one {ülke} other {ülkeler}}} monetization {{limit, plural, one {gelir elde etme değeri} other {gelir elde etme değerleri}}} downloadSource {{limit, plural, one {indirme kaynağı} other {indirme kaynakları}}} downloadReason {{limit, plural, one {indirme nedeni} other {indirme nedenleri}}} projectVersion {{limit, plural, one {proje sürümü} other {proje sürümleri}}} loader {{limit, plural, one {yükleyici} other {yükleyiciler}}} gameVersion {{limit, plural, one {oyun sürümü} other {oyun sürümleri}}} other {{limit, plural, one {öğe} other {öğeler}}}} gösteriliyor"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "Tablodan en iyi {count} {itemType, select, project {{count, plural, one {proje} other {projeler}}} country {{count, plural, one {ülke} other {ülkeler}}} monetization {{count, plural, one {gelir elde etme değeri} other {gelir elde etme değerleri}}} downloadSource {{count, plural, one {indirme kaynağı} other {indirme kaynakları}}} downloadReason {{count, plural, one {indirme nedeni} other {indirme nedenleri}}} projectVersion {{count, plural, one {proje sürümü} other {proje sürümleri}}} loader {{count, plural, one {yükleyici} other {yükleyiciler}}} gameVersion {{count, plural, one {oyun sürümü} other {oyun sürümleri}}} other {{count, plural, one {öğe} other {öğeler}}}} gösteriliyor"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# gün} other {# gün}}"
|
||||
},
|
||||
@@ -1004,6 +992,9 @@
|
||||
"create-project-version.create-modal.stage.add-files.admonition": {
|
||||
"message": "Ek dosyalar, alternatif sürümler veya varyantlar için değil, kaynak kodu gibi destekleyici kaynaklar içindir."
|
||||
},
|
||||
"create.collection.collection-info": {
|
||||
"message": "Yeni koleksiyonunuz herkese açık olarak {count, plural, =0 {projesiz hâlde} other {# proje ile}} oluşturulacaktır."
|
||||
},
|
||||
"create.collection.create-collection": {
|
||||
"message": "Koleksiyon oluştur"
|
||||
},
|
||||
@@ -2306,6 +2297,9 @@
|
||||
"landing.section.for-players.label": {
|
||||
"message": "Oyuncular İçin"
|
||||
},
|
||||
"landing.section.for-players.tagline": {
|
||||
"message": "{count}'un üzerinde içerik keşfedin"
|
||||
},
|
||||
"landing.subheading": {
|
||||
"message": "Topluluk odaklı açık kaynak platformumuzda Minecraft içerikleri keşfedin, oynayın ve paylaşın."
|
||||
},
|
||||
@@ -3287,9 +3281,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "Yardıma ihtiyacınız varsa veya ek sorularınız varsa, lütfen <help-center-link>Modrinth Yardım Merkezi'ni</help-center-link> ziyaret edin ve destekle iletişime geçmek için mavi baloncuğa tıklayın."
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "Üye kullanıcı arayüzünü göster"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "Bu, Modrinth moderatörleri ile özel bir konuşma başlığıdır. Bu projeyle ilgili konularda size mesaj gönderebilirler."
|
||||
},
|
||||
@@ -3419,9 +3410,6 @@
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, one {Bu sürüm} other {Bu sürümler}} şu anda gizlenmiş durumda ve herkese açık olarak listelenmiyor. Lütfen {count, plural, one {sürüm} other {sürümler}} mod paketine dahil edilen belirli dosyaları yeniden dağıtma izniniz olduğuna dair kanıt sunun."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "Çöz"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, one {Sürüm {version_name}} other {Sürümler}} bilinmeyen gömülü içerik nedeniyle gizlendi"
|
||||
},
|
||||
|
||||
@@ -107,6 +107,9 @@
|
||||
"analytics.chart.empty.select-table-items": {
|
||||
"message": "Виберіть елементи з таблиці знизу щоб відобразити ваші дані."
|
||||
},
|
||||
"analytics.chart.events.count-aria": {
|
||||
"message": "{count, plural, one {# подія аналітики} few {# події аналітики} other {# подій аналітики}}"
|
||||
},
|
||||
"analytics.chart.events.project-title": {
|
||||
"message": "<project>{projectName}</project>: {title}"
|
||||
},
|
||||
@@ -131,6 +134,39 @@
|
||||
"analytics.chart.tooltip.pinned-aria": {
|
||||
"message": "Закріплено"
|
||||
},
|
||||
"analytics.download-source.app": {
|
||||
"message": "Modrinth App"
|
||||
},
|
||||
"analytics.download-source.website": {
|
||||
"message": "Сайт Modrinth"
|
||||
},
|
||||
"analytics.downloads.suffix": {
|
||||
"message": "завантажень"
|
||||
},
|
||||
"analytics.empty.no-data": {
|
||||
"message": "Данні не доступні"
|
||||
},
|
||||
"analytics.empty.no-data-for-analytics": {
|
||||
"message": "Данні не доступні для аналітики"
|
||||
},
|
||||
"analytics.empty.no-projects": {
|
||||
"message": "Немає доступних проєктів"
|
||||
},
|
||||
"analytics.empty.no-projects-for-analytics": {
|
||||
"message": "Немає доступних проєктів для аналітики"
|
||||
},
|
||||
"analytics.filter.game-version-type.all": {
|
||||
"message": "Усі"
|
||||
},
|
||||
"analytics.filter.game-version-type.release": {
|
||||
"message": "Випуск"
|
||||
},
|
||||
"analytics.filter.search.project-versions": {
|
||||
"message": "Пошук версій проєкту…"
|
||||
},
|
||||
"analytics.filter.search.versions": {
|
||||
"message": "Пошук версії…"
|
||||
},
|
||||
"analytics.graph.title.downloads": {
|
||||
"message": "Динаміка завантажень"
|
||||
},
|
||||
@@ -221,6 +257,9 @@
|
||||
"analytics.project.all": {
|
||||
"message": "Усі проєкти"
|
||||
},
|
||||
"analytics.project.count": {
|
||||
"message": "{count, plural, one {# проєкт} few {# проєкти} many {# проєктів} other {# проєктів}}"
|
||||
},
|
||||
"analytics.project.icon-alt": {
|
||||
"message": "Значок {name}"
|
||||
},
|
||||
@@ -248,6 +287,30 @@
|
||||
"analytics.stat.playtime-hours": {
|
||||
"message": "{hours} год"
|
||||
},
|
||||
"analytics.table.pagination.summary": {
|
||||
"message": "Показано {start} до {end} з {total}"
|
||||
},
|
||||
"analytics.table.search.placeholder": {
|
||||
"message": "Пошук…"
|
||||
},
|
||||
"analytics.title": {
|
||||
"message": "Аналітика"
|
||||
},
|
||||
"analytics.value.monetized": {
|
||||
"message": "Монетизація"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "Немає"
|
||||
},
|
||||
"analytics.value.other": {
|
||||
"message": "Інше"
|
||||
},
|
||||
"analytics.value.unknown": {
|
||||
"message": "Невідомо"
|
||||
},
|
||||
"analytics.value.unmonetized": {
|
||||
"message": "Прибрати монетизацію"
|
||||
},
|
||||
"app-marketing.download.description": {
|
||||
"message": "Наш застосунок доступний на всіх платформах, виберіть бажану вами версію."
|
||||
},
|
||||
@@ -761,6 +824,9 @@
|
||||
"create-project-version.create-modal.stage.add-files.admonition": {
|
||||
"message": "Додаткові файли призначені для допоміжних ресурсів, таких як початковий код, а не для альтернативних версій чи варіантів."
|
||||
},
|
||||
"create.collection.collection-info": {
|
||||
"message": "Ваша нова добірка після створення буде публічною {count, plural,=0 {без проєктів} one {і міститиме # проєкт} few {і міститиме # проєкти} other {і міститиме # проєктів}}."
|
||||
},
|
||||
"create.collection.create-collection": {
|
||||
"message": "Створити добірку"
|
||||
},
|
||||
@@ -923,6 +989,9 @@
|
||||
"dashboard.affiliate-links.search": {
|
||||
"message": "Пошук партнерських посилань…"
|
||||
},
|
||||
"dashboard.analytics.from-projects": {
|
||||
"message": "з {count} {count, plural, one {проєкту} few {проєктів} many {проєктів} other {проєктів}}"
|
||||
},
|
||||
"dashboard.analytics.total-downloads": {
|
||||
"message": "Всього завантажень"
|
||||
},
|
||||
@@ -944,6 +1013,9 @@
|
||||
"dashboard.collections.empty.no-match-hint": {
|
||||
"message": "Спробуйте налаштувати фільтри або пошукові терміни."
|
||||
},
|
||||
"dashboard.collections.label.projects-count": {
|
||||
"message": "{count} {countPlural, plural, one {проєкт} few {проєкти} many {проєктів} other {проєктів}}"
|
||||
},
|
||||
"dashboard.collections.label.search-input": {
|
||||
"message": "Пошук у ваших добірках"
|
||||
},
|
||||
@@ -1214,6 +1286,15 @@
|
||||
"dashboard.creator-withdraw-modal.withdraw-limit-used": {
|
||||
"message": "Ви використали свій ліміт зняття коштів <b>{withdrawLimit}</b>. Щоб зняти більше, вам потрібно заповнити податкову форму."
|
||||
},
|
||||
"dashboard.discord-roles.banner.cta": {
|
||||
"message": "Посилання Discord"
|
||||
},
|
||||
"dashboard.discord-roles.banner.title": {
|
||||
"message": "Забрати ваші Discord ролі"
|
||||
},
|
||||
"dashboard.discord-roles.role.big-creator": {
|
||||
"message": "понад 1млн завантажень"
|
||||
},
|
||||
"dashboard.head-title": {
|
||||
"message": "Панель керування"
|
||||
},
|
||||
@@ -1226,6 +1307,9 @@
|
||||
"dashboard.notifications.link.view-history": {
|
||||
"message": "Побачити історію сповіщень"
|
||||
},
|
||||
"dashboard.notifications.link.view-more": {
|
||||
"message": "Побачити {extraNotifs} ще {extraNotifs, plural, one {повідомлення} few {повідомлень} many {повідомлень} other {повідомлень}}"
|
||||
},
|
||||
"dashboard.organizations.button.create": {
|
||||
"message": "Створити організацію"
|
||||
},
|
||||
@@ -1235,6 +1319,9 @@
|
||||
"dashboard.organizations.error.fetch": {
|
||||
"message": "Не вдалося отримати організації"
|
||||
},
|
||||
"dashboard.organizations.member-count": {
|
||||
"message": "{count} {count, plural, one {учасник} few {учасники} many {учасників} other {учасників}}"
|
||||
},
|
||||
"dashboard.organizations.title": {
|
||||
"message": "Організації"
|
||||
},
|
||||
@@ -1292,6 +1379,9 @@
|
||||
"dashboard.projects.links.discord-invite.label": {
|
||||
"message": "Запрошення до Discord"
|
||||
},
|
||||
"dashboard.projects.links.header.edit": {
|
||||
"message": "Редагувати посилання"
|
||||
},
|
||||
"dashboard.projects.links.issue-tracker.description": {
|
||||
"message": "Місце, де користувачі можуть повідомляти про помилки, проблеми та сумніви щодо вашого проєкту."
|
||||
},
|
||||
@@ -2621,6 +2711,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Добірка"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, one {завантаження} few {завантаження} many {завантажень} other {завантажень}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Приєднався"
|
||||
},
|
||||
@@ -2639,6 +2732,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "Організації"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, one {проєкт} few {проєкти} many {проєктів} other {проєктів}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "Збереження…"
|
||||
},
|
||||
@@ -2648,6 +2744,9 @@
|
||||
"profile.meta.description-with-bio": {
|
||||
"message": "{bio} — Завантажуйте проєкти {username} на Modrinth"
|
||||
},
|
||||
"profile.stats.projects-followers": {
|
||||
"message": "{count, plural, one {<stat>{count}</stat> відстежує} few {<stat>{count}</stat> відстежує} other {<stat>{count}</stat> відстежують}}"
|
||||
},
|
||||
"profile.user-id": {
|
||||
"message": "ID користувача: {id}"
|
||||
},
|
||||
@@ -2975,9 +3074,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "Якщо вам потрібна допомога або у вас є додаткові запитання, відвідайте <help-center-link>довідковий центр Modrinth</help-center-link> і натисніть синю підказку, щоб зв’язатися зі службою підтримки."
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "Показати інтерфейс учасника"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "Це тема приватної розмови з модераторами Modrinth. Вони можуть надіслати вам повідомлення про проблеми щодо цього проєкту."
|
||||
},
|
||||
@@ -3083,6 +3179,9 @@
|
||||
"project.settings.permissions.learn-more": {
|
||||
"message": "Дізнатися більше"
|
||||
},
|
||||
"project.settings.permissions.search-placeholder": {
|
||||
"message": "Пошук {count} {count, plural, one {зовнішнього проєкту} few {зовнішніх проєктів} many {зовнішніх проєктів} other {зовнішніх проєктів}}…"
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Налаштування"
|
||||
},
|
||||
@@ -3095,8 +3194,8 @@
|
||||
"project.versions.title": {
|
||||
"message": "Версії"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "Розв'язати"
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, one {Ця версія} few {Ці версії} many {Ці версії} other {Ці версії}} наразі наразі утримано та поза списком. Будь ласка, надайте підтвердження того, що ви маєте дозвіл на повторне розповсюдження певних файлів, які входять до {count, plural, one {версії} few {версій} many {версій} other {версій}} збірки."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, one {Версія{version_name}} other {Версії}} утримано через невідомий убудований уміст"
|
||||
@@ -3986,6 +4085,9 @@
|
||||
"settings.billing.switch.tooltip.monthly-additional-per-year": {
|
||||
"message": "Щомісячна оплата обійдеться вам у додаткові {amount} на рік"
|
||||
},
|
||||
"settings.billing.switches-to-billing-on": {
|
||||
"message": "Змінено на {interval, select, monthly {monthly} yearly {yearly} other {{interval}}} оплату {date}"
|
||||
},
|
||||
"settings.billing.update-method": {
|
||||
"message": "Оновити спосіб"
|
||||
},
|
||||
|
||||
@@ -107,6 +107,9 @@
|
||||
"analytics.chart.empty.select-table-items": {
|
||||
"message": "Chọn các mục trong bảng dưới để hiển thị dự liệu của bạn."
|
||||
},
|
||||
"analytics.chart.events.count-aria": {
|
||||
"message": "{count, plural, other {# sự kiện dự án}}"
|
||||
},
|
||||
"analytics.chart.events.project-title": {
|
||||
"message": "<project>{projectName}</project>: {title}"
|
||||
},
|
||||
@@ -131,8 +134,14 @@
|
||||
"analytics.chart.render-limit.header": {
|
||||
"message": "Hiện thị tất cả {count} đường trong biểu đồ?"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "Đang hiển thị {limit} {itemType, select, project {{limit, plural, one {dự án} other {dự án}}} country {{limit, plural, one {quốc gia} other {quốc gia}}} monetization {{limit, plural, one {doanh thu} other {doanh thu}}} downloadSource {{limit, plural, one {nơi tải gốc} other {nơi tải gốc}}} downloadReason {{limit, plural, one {lý do tải} other {lý do tải}}} projectVersion {{limit, plural, one {phiên bản dự án} other {phiên bản dự án}}} loader {{limit, plural, one {loader} other {loaders}}} gameVersion {{limit, plural, one {phiên bản game} other {phiên bản game}}} other {{limit, plural, one {mục} other {mục}}}} từ bảng"
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, other {# ngày}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.hours": {
|
||||
"message": "{count, plural, other {# giờ}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.minutes": {
|
||||
"message": "{count, plural, other {# phút}}"
|
||||
},
|
||||
"analytics.chart.tooltip.hide-entry": {
|
||||
"message": "Che {name} trong biểu đồ"
|
||||
@@ -320,12 +329,21 @@
|
||||
"analytics.project.all": {
|
||||
"message": "Tất cả dự án"
|
||||
},
|
||||
"analytics.project.count": {
|
||||
"message": "{count, plural, other {# dự án}}"
|
||||
},
|
||||
"analytics.project.icon-alt": {
|
||||
"message": "Biểu tượng {name}"
|
||||
},
|
||||
"analytics.project.select": {
|
||||
"message": "Chọn dự án"
|
||||
},
|
||||
"analytics.project.user": {
|
||||
"message": "Dự án của {username}"
|
||||
},
|
||||
"analytics.project.your": {
|
||||
"message": "Dự án của bạn"
|
||||
},
|
||||
"analytics.query.filter.add": {
|
||||
"message": "Thêm bộ lọc"
|
||||
},
|
||||
@@ -344,6 +362,15 @@
|
||||
"analytics.stat.downloads": {
|
||||
"message": "Lượt tải"
|
||||
},
|
||||
"analytics.stat.monetization-banner.body": {
|
||||
"message": "Chỉ lượt xem và lượt tải qua Modrinth hợp lệ cho việc kiếm tiền và phải vượt qua bộ lọc chống gian lận. Lượt tải từ Modrinth App yêu cầu người dùng phải đăng nhập. Vì tất cả các dự án đều có tỷ lệ lượt tải xuống hợp lệ tương đương nhau, doanh thu của bạn cũng không thay đổi đáng kể ngay cả khi tính toàn bộ lượt tải."
|
||||
},
|
||||
"analytics.stat.monetization-banner.learn-more": {
|
||||
"message": "Tìm hiểu thêm"
|
||||
},
|
||||
"analytics.stat.monetization-banner.title": {
|
||||
"message": "Việc kiếm tiền hoạt động như thế nào?"
|
||||
},
|
||||
"analytics.stat.playtime": {
|
||||
"message": "Thời gian chơi"
|
||||
},
|
||||
@@ -383,6 +410,15 @@
|
||||
"analytics.table.csv.selected-range": {
|
||||
"message": "Phạm Vi Được Chọn"
|
||||
},
|
||||
"analytics.table.duration.days": {
|
||||
"message": "{count, plural, other {# ngày}}"
|
||||
},
|
||||
"analytics.table.duration.hours": {
|
||||
"message": "{count, plural, other {# giờ}}"
|
||||
},
|
||||
"analytics.table.duration.minutes": {
|
||||
"message": "{count, plural, other {# phút}}"
|
||||
},
|
||||
"analytics.table.empty.no-matching-rows": {
|
||||
"message": "Không mục thống kê nào giống với mục tìm kiếm"
|
||||
},
|
||||
@@ -956,6 +992,9 @@
|
||||
"create-project-version.create-modal.stage.add-files.admonition": {
|
||||
"message": "Các tệp bổ trợ dùng cho các tài nguyên hỗ trợ như mã nguồn, không dùng cho các phiên bản hoặc biến thể thay thế."
|
||||
},
|
||||
"create.collection.collection-info": {
|
||||
"message": "Bộ sưu tập mới của bạn sẽ được tạo dưới dạng bộ sưu tập công khai với {count, plural, =0 {không có dự án} other {# dự án}}."
|
||||
},
|
||||
"create.collection.create-collection": {
|
||||
"message": "Tạo bộ sưu tập"
|
||||
},
|
||||
@@ -1118,6 +1157,9 @@
|
||||
"dashboard.affiliate-links.search": {
|
||||
"message": "Tìm kiếm link affiliate..."
|
||||
},
|
||||
"dashboard.analytics.from-projects": {
|
||||
"message": "từ {count} {count, plural, other {dự án}} khác"
|
||||
},
|
||||
"dashboard.analytics.total-downloads": {
|
||||
"message": "Tổng số lượt tải xuống"
|
||||
},
|
||||
@@ -1412,6 +1454,24 @@
|
||||
"dashboard.creator-withdraw-modal.withdraw-limit-used": {
|
||||
"message": "Bạn đã sử dụng hết giới hạn rút tiền <b>{withdrawLimit}</b>. Bạn cần hoàn thành biểu mẫu thuế để rút thêm."
|
||||
},
|
||||
"dashboard.discord-roles.banner.body": {
|
||||
"message": "Bạn đủ điều kiện cho vai trò {roles}. Hãy liên kết tài khoản Discord với Modrinth và chúng tôi sẽ đồng bộ chúng tự động."
|
||||
},
|
||||
"dashboard.discord-roles.banner.cta": {
|
||||
"message": "Liên kết với Discord"
|
||||
},
|
||||
"dashboard.discord-roles.banner.title": {
|
||||
"message": "Nhận vai trò Discord của bạn"
|
||||
},
|
||||
"dashboard.discord-roles.role.big-creator": {
|
||||
"message": "1M+ Downloads"
|
||||
},
|
||||
"dashboard.discord-roles.role.creator": {
|
||||
"message": "Creator"
|
||||
},
|
||||
"dashboard.discord-roles.role.pride": {
|
||||
"message": "Pride 2026"
|
||||
},
|
||||
"dashboard.head-title": {
|
||||
"message": "Bảng điều khiển"
|
||||
},
|
||||
@@ -1436,6 +1496,9 @@
|
||||
"dashboard.organizations.error.fetch": {
|
||||
"message": "Không thể tải tổ chức"
|
||||
},
|
||||
"dashboard.organizations.member-count": {
|
||||
"message": "{count} {count, plural,other {thành viên}}"
|
||||
},
|
||||
"dashboard.organizations.title": {
|
||||
"message": "Tổ chức"
|
||||
},
|
||||
@@ -1481,6 +1544,9 @@
|
||||
"dashboard.projects.links.button.edit": {
|
||||
"message": "Sửa liên kết"
|
||||
},
|
||||
"dashboard.projects.links.changes-applied": {
|
||||
"message": "<strong>{count}</strong> {count, plural, other {dự án}} sẽ được thay đổi."
|
||||
},
|
||||
"dashboard.projects.links.description": {
|
||||
"message": "Bất kể đường liên kết nào bạn nhập ở dưới sẽ được ghi đè lên các dự án được chọn. Mục nào để trống sẽ được bỏ qua. Bạn có thể xóa đường liên kết trong tất cả các dự án được chọn bằng nút thùng rác."
|
||||
},
|
||||
@@ -1898,6 +1964,9 @@
|
||||
"frog.title": {
|
||||
"message": "Ếch"
|
||||
},
|
||||
"hosting-marketing.available-locations": {
|
||||
"message": "Có mặt tại Bắc Mỹ, Châu Âu, Đông Nam Á và Úc với độ phủ sóng rộng."
|
||||
},
|
||||
"hosting-marketing.billing.monthly": {
|
||||
"message": "Thanh toán hàng tháng"
|
||||
},
|
||||
@@ -1958,6 +2027,9 @@
|
||||
"hosting-marketing.faq.location": {
|
||||
"message": "Những máy chủ Modrinth Hosting được nằm ở đâu? Tôi có thể chọn khu vực không?"
|
||||
},
|
||||
"hosting-marketing.faq.location.answer": {
|
||||
"message": "Hiện giờ chúng tôi có máy chủ khắp Bắc Mỹ, Châu Âu, Đông Nam Á và Úc mà bạn có thể chọn khi mua. Sẽ có thêm khu vực trong tương lai! Nếu bạn muốn đổi khu vực, hãy liên hệ đội hỗ trợ."
|
||||
},
|
||||
"hosting-marketing.faq.versions-loaders": {
|
||||
"message": "Những phiên bản Minecraft và modloader nào có thể được sử dụng?"
|
||||
},
|
||||
@@ -2231,6 +2303,9 @@
|
||||
"landing.subheading": {
|
||||
"message": "Khám phá, chơi và chia sẻ nội dung Minecraft thông qua nền tảng nguồn mở được xây dựng cho cộng đồng."
|
||||
},
|
||||
"layout.action.analytics-events": {
|
||||
"message": "Sự kiện phân tích"
|
||||
},
|
||||
"layout.action.change-theme": {
|
||||
"message": "Đổi chủ đề"
|
||||
},
|
||||
@@ -2777,12 +2852,18 @@
|
||||
"muralpay.warning.wallet-address": {
|
||||
"message": "Hãy kiểm tra kỹ địa chỉ ví. Số tiền gửi đến địa chỉ không chính xác sẽ không thể khôi phục."
|
||||
},
|
||||
"organization.settings.projects.edit-links.affected-projects": {
|
||||
"message": "{count, plural, other {# dự án}} sẽ được thay đổi."
|
||||
},
|
||||
"profile.bio.fallback.creator": {
|
||||
"message": "Một nhà sáng tạo trên Modrinth."
|
||||
},
|
||||
"profile.bio.fallback.user": {
|
||||
"message": "Một người dùng Modrinth."
|
||||
},
|
||||
"profile.button.analytics": {
|
||||
"message": "Xem phân tích người dùng"
|
||||
},
|
||||
"profile.button.billing": {
|
||||
"message": "Quản lý thanh toán người dùng"
|
||||
},
|
||||
@@ -2801,6 +2882,9 @@
|
||||
"profile.button.set-affiliate": {
|
||||
"message": "Đặt làm affiliate"
|
||||
},
|
||||
"profile.collection.projects-count": {
|
||||
"message": "{count, plural, other {# dự án}}"
|
||||
},
|
||||
"profile.details.label.auth-providers": {
|
||||
"message": "Nhà cung cấp xác thực"
|
||||
},
|
||||
@@ -2876,6 +2960,9 @@
|
||||
"profile.official-account.bio": {
|
||||
"message": "Tài khoản chính thức của Modrinth. Nhận hỗ trợ từ <support-link></support-link> hoặc qua email tại <email></email>"
|
||||
},
|
||||
"profile.stats.projects-followers": {
|
||||
"message": "{count, plural, other {<stat>{count}</stat> người theo dõi dự án}}"
|
||||
},
|
||||
"profile.user-id": {
|
||||
"message": "ID người dùng: {id}"
|
||||
},
|
||||
@@ -3203,9 +3290,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "Nếu bạn cần trợ giúp hoặc có thắc mắc, vui lòng vào <help-center-link>trung tâm trợ giúp</help-center-link> và bấm vào nút tin nhắn màu xanh để liên hệ hỗ trợ."
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "Hiển thị giao diện thành viên"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "Đây là nơi hội thoại riêng tư với bên kiểm duyệt của Modrinth. Họ có thể nhắn cho bạn về những vấn đề trong dự án này."
|
||||
},
|
||||
@@ -3311,20 +3395,32 @@
|
||||
"project.settings.permissions.learn-more": {
|
||||
"message": "Tìm hiểu thêm"
|
||||
},
|
||||
"project.settings.permissions.search-placeholder": {
|
||||
"message": "Tìm kiếm trong {count} {count, plural,other {dự án ngoài}}..."
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "Cài đặt"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "Truy cập bảng điều khiển dự án"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count, plural, other {lượt tải}}"
|
||||
},
|
||||
"project.stats.followers-label": {
|
||||
"message": "{count, plural, other {lượt theo dõi}}"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} đã được lưu trữ. {title} sẽ không nhận được bất kỳ bản cập nhật nào trong tương lai trừ khi tác giả quyết định hủy lưu trữ dự án."
|
||||
},
|
||||
"project.versions.title": {
|
||||
"message": "Phiên bản"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "Khắc phục"
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, other {Những phiên bản này}} bị giữ lại và không được công khai. Vui lòng đưa ra bằng chứng rằng bạn có quyền để đăng tải một số tệp đưọc bao gồm trong {count, plural, other {các phiên bản}} modpack đó."
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, other{Phiên bản}} bị giữ lại do chứa nội dung nhúng không xác định"
|
||||
},
|
||||
"report.already-reported": {
|
||||
"message": "Bạn đã báo cáo {title}"
|
||||
|
||||
@@ -107,6 +107,9 @@
|
||||
"analytics.chart.empty.select-table-items": {
|
||||
"message": "从下表中选择项目以可视化您的数据。"
|
||||
},
|
||||
"analytics.chart.events.count-aria": {
|
||||
"message": "{count, plural,other {# 个分析事件}}"
|
||||
},
|
||||
"analytics.chart.events.project-title": {
|
||||
"message": "<project>{projectName}</project>:{title}"
|
||||
},
|
||||
@@ -131,20 +134,8 @@
|
||||
"analytics.chart.render-limit.header": {
|
||||
"message": "是否在图中显示全部 {count} 行?"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"message": "展示全部 {itemType, select, project {{count, plural, one {项目} other {项目}}} country {{count, plural, one {国家} other {国家}}} monetization {{count, plural, one {收益项} other {收益项}}} downloadSource {{count, plural, one {下载来源} other {下载来源}}} downloadReason {{count, plural, one {下载原因} other {下载原因}}} projectVersion {{count, plural, one {项目版本} other {项目版本}}} loader {{count, plural, one {加载器} other {加载器}}} gameVersion {{count, plural, one {游戏版本} other {游戏版本}}} other {{count, plural, one {条目} other {条目}}}} 表格数据"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "正在展示{count}{itemType, select,project {{count, plural,one {项目}other {项目}}}country {{count, plural,one {国家}other {国家}}} monetization {{count, plural,one {变现收益}other {变现收益}}} downloadSource {{count, plural,one {下载来源}other {下载来源}}} downloadReason {{count, plural,one {下载原因}other {下载原因}}} projectVersion {{count, plural,one {项目版本}other {项目版本}}} loader {{count, plural,one {启动器}other {启动器}}} gameVersion {{count, plural,one {游戏版本}other {游戏版本}}} other {{count, plural,one {项目}other {项目}}}}"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "正在展示{limit}{itemType, select,project {{limit, plural,one {项目}other {项目}}}country {{limit, plural,one {国家}other {国家}}} monetization {{limit, plural,one {变现收益}other {变现收益}}} downloadSource {{limit, plural,one {下载来源}other {下载来源}}} downloadReason {{limit, plural,one {下载原因}other {下载原因}}} projectVersion {{limit, plural,one {项目版本}other {项目版本}}} loader {{limit, plural,one {启动器}other {启动器}}} gameVersion {{limit, plural,one {游戏版本}other {游戏版本}}}other {{limit, plural,one {项目}other {项目}}}}"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "从表格中展示前{count}\n{itemType, select,\nproject {{count, plural, one {个项目} other {个项目}}}\ncountry {{count, plural, one {个国家} other {个国家}}}\nmonetization {{count, plural, one {项变现金额} other {项变现金额}}}\ndownloadSource {{count, plural, one {个下载来源} other {个下载来源}}}\ndownloadReason {{count, plural, one {条下载原因} other {条下载原因}}}\nprojectVersion {{count, plural, one {个项目版本} other {个项目版本}}}\nloader {{count, plural, one {个加载器} other {个加载器}}}\ngameVersion {{count, plural, one {个游戏版本} other {个游戏版本}}}\nother {{count, plural, one {条数据} other {条数据}}}\n}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, one {# 天} other {# 天}}"
|
||||
"message": "{count, plural, other {# 天}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.hours": {
|
||||
"message": "{count, plural, one {# 小时} other {# 小时}}"
|
||||
@@ -417,7 +408,7 @@
|
||||
"message": "选择范围"
|
||||
},
|
||||
"analytics.table.duration.days": {
|
||||
"message": "{count, plural, one {# 天} other {# 天}}"
|
||||
"message": "{count, plural, other {# 天}}"
|
||||
},
|
||||
"analytics.table.duration.hours": {
|
||||
"message": "{count, plural, one {# 小时} other {# 小时}}"
|
||||
@@ -735,10 +726,10 @@
|
||||
"message": "重置你的密码"
|
||||
},
|
||||
"auth.sign-in.2fa.description": {
|
||||
"message": "请输入双重身份验证代码以继续。"
|
||||
"message": "请输入双重验证代码以便继续操作。"
|
||||
},
|
||||
"auth.sign-in.2fa.label": {
|
||||
"message": "输入双重身份验证代码"
|
||||
"message": "输入双重验证代码"
|
||||
},
|
||||
"auth.sign-in.2fa.placeholder": {
|
||||
"message": "输入验证码…"
|
||||
@@ -998,6 +989,9 @@
|
||||
"create-project-version.create-modal.stage.add-files.admonition": {
|
||||
"message": "补充文件仅用来保存源代码等支持性资料,不能用来存放替代版本或者变体文件。"
|
||||
},
|
||||
"create.collection.collection-info": {
|
||||
"message": "将创建一个公开收藏夹,包含{count, plural, =0 {0个项目} other {#个项目}}。"
|
||||
},
|
||||
"create.collection.create-collection": {
|
||||
"message": "新建收藏夹"
|
||||
},
|
||||
@@ -1160,6 +1154,9 @@
|
||||
"dashboard.affiliate-links.search": {
|
||||
"message": "搜索推广链接…"
|
||||
},
|
||||
"dashboard.analytics.from-projects": {
|
||||
"message": "来自 {count} {count, plural, other {个项目}}"
|
||||
},
|
||||
"dashboard.analytics.total-downloads": {
|
||||
"message": "总下载量"
|
||||
},
|
||||
@@ -1181,6 +1178,9 @@
|
||||
"dashboard.collections.empty.no-match-hint": {
|
||||
"message": "尝试调整你的过滤器或搜索词。"
|
||||
},
|
||||
"dashboard.collections.label.projects-count": {
|
||||
"message": "{count} {countPlural, plural, other {个项目}}"
|
||||
},
|
||||
"dashboard.collections.label.search-input": {
|
||||
"message": "搜索你的收藏夹"
|
||||
},
|
||||
@@ -1481,6 +1481,9 @@
|
||||
"dashboard.notifications.link.view-history": {
|
||||
"message": "查看历史通知"
|
||||
},
|
||||
"dashboard.notifications.link.view-more": {
|
||||
"message": "查看更多 {extraNotifs} 个{extraNotifs, plural, other {通知}}"
|
||||
},
|
||||
"dashboard.organizations.button.create": {
|
||||
"message": "创建组织"
|
||||
},
|
||||
@@ -1490,6 +1493,9 @@
|
||||
"dashboard.organizations.error.fetch": {
|
||||
"message": "获取组织失败"
|
||||
},
|
||||
"dashboard.organizations.member-count": {
|
||||
"message": "{count} {count, plural, other {名成员}}"
|
||||
},
|
||||
"dashboard.organizations.title": {
|
||||
"message": "组织"
|
||||
},
|
||||
@@ -1535,6 +1541,9 @@
|
||||
"dashboard.projects.links.button.edit": {
|
||||
"message": "编辑链接"
|
||||
},
|
||||
"dashboard.projects.links.changes-applied": {
|
||||
"message": "更改将应用到 <strong>{count}</strong> {count, plural, other {个项目}}。"
|
||||
},
|
||||
"dashboard.projects.links.description": {
|
||||
"message": "以下你指定的任何链接,都会覆盖所选项目上的现有链接。留空的内容将被忽略。你可以使用垃圾桶按钮从所有选定的项目中清除某个链接。"
|
||||
},
|
||||
@@ -2906,6 +2915,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "收藏夹"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {countPlural, plural, other {次下载}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "加入于"
|
||||
},
|
||||
@@ -2924,6 +2936,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "组织"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} {countPlural, plural, other {个项目}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "正在保存…"
|
||||
},
|
||||
@@ -2939,6 +2954,9 @@
|
||||
"profile.official-account.bio": {
|
||||
"message": "Modrinth的官方用户账号。在<support-link></support-link>处获取支持或通过电子邮件<email></email>获取支持。"
|
||||
},
|
||||
"profile.stats.projects-followers": {
|
||||
"message": "{count, plural, other {<stat>{count}</stat>项目关注者}}"
|
||||
},
|
||||
"profile.user-id": {
|
||||
"message": "用户ID:{id}"
|
||||
},
|
||||
@@ -3266,9 +3284,6 @@
|
||||
"project.moderation.thread.help-center-note.2": {
|
||||
"message": "如果你需要帮助或有其他疑问,请访问 <help-center-link>Modrinth Help Center</help-center-link>,然后点击蓝色气泡以联系支持。"
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "显示成员图形界面"
|
||||
},
|
||||
"project.moderation.thread.private-description": {
|
||||
"message": "这是与 Modrinth 管理员的私人对话消息。他们可能会就此项目的问题向你发送消息。"
|
||||
},
|
||||
@@ -3383,6 +3398,12 @@
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "访问项目的控制面板"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count, plural, other {下载}}"
|
||||
},
|
||||
"project.stats.followers-label": {
|
||||
"message": "{count, plural, other {关注者}}"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} 已归档。除非作者决定取消归档,否则 {title} 将不再更新。"
|
||||
},
|
||||
@@ -3390,10 +3411,7 @@
|
||||
"message": "版本"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, one {此版本已保留且未公开列出。} other {这些版本已保留且未公开列出。}} 请提供证明,证明你有权重新分发该模组包{count, plural, one {版本} other {各版本}}中包含的某些文件。"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "完成"
|
||||
"message": "{count, plural, other {此版本}}已保留且未公开列出。请提供你有权重新分发此模组包{count, plural, other {版本}}所包含的某些文件的证明。"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, one {版本 {version_name}} other {这些版本}} 因未知嵌入内容被保留"
|
||||
@@ -3963,19 +3981,19 @@
|
||||
"message": "账户安全"
|
||||
},
|
||||
"settings.account.security.two-factor.action.remove": {
|
||||
"message": "移除 2FA"
|
||||
"message": "移除双重验证"
|
||||
},
|
||||
"settings.account.security.two-factor.action.setup": {
|
||||
"message": "设置 2FA"
|
||||
"message": "设置双重验证"
|
||||
},
|
||||
"settings.account.security.two-factor.description": {
|
||||
"message": "在登录时为您的账户增加一层额外的安全保障。"
|
||||
},
|
||||
"settings.account.security.two-factor.modal.remove.header": {
|
||||
"message": "移除2重验证"
|
||||
"message": "移除双重验证"
|
||||
},
|
||||
"settings.account.security.two-factor.modal.setup.header": {
|
||||
"message": "设置2重验证"
|
||||
"message": "设置双重验证"
|
||||
},
|
||||
"settings.account.security.two-factor.title": {
|
||||
"message": "双因素认证"
|
||||
|
||||
@@ -23,6 +23,15 @@
|
||||
"analytics.breakdown.country": {
|
||||
"message": "國家或地區"
|
||||
},
|
||||
"analytics.breakdown.dependent-on": {
|
||||
"message": "依賴於"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-download": {
|
||||
"message": "依賴專案"
|
||||
},
|
||||
"analytics.breakdown.dependent-project-type": {
|
||||
"message": "依賴專案類型"
|
||||
},
|
||||
"analytics.breakdown.download-reason": {
|
||||
"message": "下載原因"
|
||||
},
|
||||
@@ -38,6 +47,9 @@
|
||||
"analytics.breakdown.loader": {
|
||||
"message": "載入器"
|
||||
},
|
||||
"analytics.breakdown.members": {
|
||||
"message": "成員"
|
||||
},
|
||||
"analytics.breakdown.monetization": {
|
||||
"message": "營利情形"
|
||||
},
|
||||
@@ -69,7 +81,7 @@
|
||||
"message": "{hours} 小時"
|
||||
},
|
||||
"analytics.chart.controls.active-count": {
|
||||
"message": "{count} 項啟用中"
|
||||
"message": "已啟用 {count} 項"
|
||||
},
|
||||
"analytics.chart.controls.annotations": {
|
||||
"message": "註釋"
|
||||
@@ -107,6 +119,9 @@
|
||||
"analytics.chart.empty.select-table-items": {
|
||||
"message": "從表格選取項目來視覺化你的數據。"
|
||||
},
|
||||
"analytics.chart.events.count-aria": {
|
||||
"message": "{count, plural, other {# 個分析事件}}"
|
||||
},
|
||||
"analytics.chart.events.project-title": {
|
||||
"message": "<project>{projectName}</project>:{title}"
|
||||
},
|
||||
@@ -125,6 +140,39 @@
|
||||
"analytics.chart.legend.previous-period-suffix": {
|
||||
"message": "{name}(上一期)"
|
||||
},
|
||||
"analytics.chart.render-limit.description": {
|
||||
"message": "顯示表格中所有已選取的資料列可能會降低頁面效能。"
|
||||
},
|
||||
"analytics.chart.render-limit.header": {
|
||||
"message": "要在圖表中顯示所有 {count} 個資料列嗎?"
|
||||
},
|
||||
"analytics.chart.table-selection.all": {
|
||||
"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 {項目}}}}"
|
||||
},
|
||||
"analytics.chart.table-selection.count": {
|
||||
"message": "正在顯示表格中的 {count} 個{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 {項目}}}}"
|
||||
},
|
||||
"analytics.chart.table-selection.limited": {
|
||||
"message": "正在顯示表格中的 {limit} 個{itemType, select, project {{limit, plural, other {專案}}} country {{limit, plural, other {國家/地區}}} monetization {{limit, plural, other {營利情形}}} downloadSource {{limit, plural, other {下載來源}}} downloadReason {{limit, plural, other {下載原因}}} member {{limit, plural, other {成員}}} projectVersion {{limit, plural, other {專案版本}}} loader {{limit, plural, other {載入器}}} gameVersion {{limit, plural, other {遊戲版本}}} other {{limit, plural, other {項目}}}}"
|
||||
},
|
||||
"analytics.chart.table-selection.top": {
|
||||
"message": "正在顯示表格中的前 {count} 個{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 {項目}}}}"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-on-project": {
|
||||
"message": "依賴於 {project}"
|
||||
},
|
||||
"analytics.chart.tooltip.dependent-project-version": {
|
||||
"message": "{dependentProject} 依賴於 {dependencyProject},{version}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.days": {
|
||||
"message": "{count, plural, other {# 天}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.hours": {
|
||||
"message": "{count, plural, other {# 小時}}"
|
||||
},
|
||||
"analytics.chart.tooltip.duration.minutes": {
|
||||
"message": "{count, plural, other {# 分鐘}}"
|
||||
},
|
||||
"analytics.chart.tooltip.hide-entry": {
|
||||
"message": "在圖表中隱藏 {name}"
|
||||
},
|
||||
@@ -153,7 +201,7 @@
|
||||
"message": "曲線圖"
|
||||
},
|
||||
"analytics.download-reason.dependency": {
|
||||
"message": "前置模組"
|
||||
"message": "相依項"
|
||||
},
|
||||
"analytics.download-reason.modpack": {
|
||||
"message": "模組包"
|
||||
@@ -176,12 +224,18 @@
|
||||
"analytics.empty.no-data": {
|
||||
"message": "暫無可用數據"
|
||||
},
|
||||
"analytics.empty.no-data-for-analytics": {
|
||||
"message": "暫無可供分析的數據"
|
||||
},
|
||||
"analytics.empty.no-projects": {
|
||||
"message": "暫無可用專案"
|
||||
},
|
||||
"analytics.empty.no-projects-for-analytics": {
|
||||
"message": "暫無可供分析的專案"
|
||||
},
|
||||
"analytics.empty.select-project": {
|
||||
"message": "請選擇至少一個專案以查看數據"
|
||||
},
|
||||
"analytics.filter.game-version-type": {
|
||||
"message": "遊戲版本類型"
|
||||
},
|
||||
@@ -194,9 +248,15 @@
|
||||
"analytics.filter.search.countries": {
|
||||
"message": "搜尋國家或地區..."
|
||||
},
|
||||
"analytics.filter.search.dependent-projects": {
|
||||
"message": "搜尋專案..."
|
||||
},
|
||||
"analytics.filter.search.download-sources": {
|
||||
"message": "搜尋下載來源..."
|
||||
},
|
||||
"analytics.filter.search.members": {
|
||||
"message": "搜尋成員..."
|
||||
},
|
||||
"analytics.filter.search.project-versions": {
|
||||
"message": "搜尋專案版本..."
|
||||
},
|
||||
@@ -207,7 +267,7 @@
|
||||
"message": "下載量趨勢"
|
||||
},
|
||||
"analytics.graph.title.playtime": {
|
||||
"message": "遊玩時長趨勢"
|
||||
"message": "遊玩時數趨勢"
|
||||
},
|
||||
"analytics.graph.title.revenue": {
|
||||
"message": "收益趨勢"
|
||||
@@ -305,6 +365,9 @@
|
||||
"analytics.project.all": {
|
||||
"message": "所有專案"
|
||||
},
|
||||
"analytics.project.count": {
|
||||
"message": "{count, plural, other {# 個專案}}"
|
||||
},
|
||||
"analytics.project.icon-alt": {
|
||||
"message": "{name}圖示"
|
||||
},
|
||||
@@ -345,7 +408,7 @@
|
||||
"message": "盈利機制是如何運作的?"
|
||||
},
|
||||
"analytics.stat.playtime": {
|
||||
"message": "遊玩時長"
|
||||
"message": "遊玩時數"
|
||||
},
|
||||
"analytics.stat.playtime-hours": {
|
||||
"message": "{hours} 小時"
|
||||
@@ -378,11 +441,20 @@
|
||||
"message": "Modrinth 數據分析 - 按{breakdown} - {dateRange}"
|
||||
},
|
||||
"analytics.table.csv.header.playtime-seconds": {
|
||||
"message": "遊玩時長(秒)"
|
||||
"message": "遊玩時數(秒)"
|
||||
},
|
||||
"analytics.table.csv.selected-range": {
|
||||
"message": "選取範圍"
|
||||
},
|
||||
"analytics.table.duration.days": {
|
||||
"message": "{count, plural, other {# 天}}"
|
||||
},
|
||||
"analytics.table.duration.hours": {
|
||||
"message": "{count, plural, other {# 小時}}"
|
||||
},
|
||||
"analytics.table.duration.minutes": {
|
||||
"message": "{count, plural, other {# 分鐘}}"
|
||||
},
|
||||
"analytics.table.empty.no-matching-rows": {
|
||||
"message": "沒有符合條件的數據"
|
||||
},
|
||||
@@ -431,6 +503,12 @@
|
||||
"analytics.value.monetized": {
|
||||
"message": "可營利"
|
||||
},
|
||||
"analytics.value.no-dependent": {
|
||||
"message": "無"
|
||||
},
|
||||
"analytics.value.no-dependent-tooltip": {
|
||||
"message": "下載原因不是相依項"
|
||||
},
|
||||
"analytics.value.none": {
|
||||
"message": "無"
|
||||
},
|
||||
@@ -917,18 +995,48 @@
|
||||
"conversation-thread.reply-editor.placeholder.send": {
|
||||
"message": "傳送訊息..."
|
||||
},
|
||||
"conversation-thread.reply-modal.confirmation.description": {
|
||||
"message": "確認管理員不會主動查看此內容"
|
||||
},
|
||||
"conversation-thread.reply-modal.confirmation.label": {
|
||||
"message": "我了解管理員不會主動查看這個討論串。"
|
||||
},
|
||||
"conversation-thread.reply-modal.description": {
|
||||
"message": "你的專案已獲核准。因此,管理團隊不會主動查看這個討論串。不過,如果你的專案出現問題,他們仍可能會看到你的訊息。"
|
||||
},
|
||||
"conversation-thread.reply-modal.header": {
|
||||
"message": "回覆討論串"
|
||||
},
|
||||
"conversation-thread.reply-modal.help-center-note": {
|
||||
"message": "如果你需要聯絡管理團隊,請前往 <help-center-link>Modrinth 說明中心</help-center-link>,並按一下右下角的藍色對話氣泡以聯絡客服團隊。"
|
||||
},
|
||||
"conversation-thread.resubmit-modal.confirmation.description": {
|
||||
"message": "確認我解決了管理員提到的問題"
|
||||
},
|
||||
"conversation-thread.resubmit-modal.confirmation.label": {
|
||||
"message": "我確認管理員所提到的問題皆已解決。"
|
||||
},
|
||||
"conversation-thread.resubmit-modal.description": {
|
||||
"message": "你即將提交 <project-title>{projectTitle}</project-title> 給管理員再次審查。"
|
||||
},
|
||||
"conversation-thread.resubmit-modal.header.resubmitting": {
|
||||
"message": "重新提交審查"
|
||||
},
|
||||
"conversation-thread.resubmit-modal.header.submitting": {
|
||||
"message": "提交審查"
|
||||
},
|
||||
"conversation-thread.resubmit-modal.reminder": {
|
||||
"message": "請務必確認你解決了管理團隊提出的所有問題。"
|
||||
},
|
||||
"conversation-thread.resubmit-modal.warning": {
|
||||
"message": "在未解決管理員提出的問題的情況下反覆提交審查,可能會導致帳號被停權。"
|
||||
},
|
||||
"create-project-version.create-modal.stage.add-files.admonition": {
|
||||
"message": "補充檔案是用於提供原始碼等支援性資源,而非用於替代版本或變體。"
|
||||
},
|
||||
"create.collection.collection-info": {
|
||||
"message": "你的新收藏將建立為公開收藏,{count, plural, =0 {不包含任何專案} other {包含 # 個專案}}。"
|
||||
},
|
||||
"create.collection.create-collection": {
|
||||
"message": "建立收藏"
|
||||
},
|
||||
@@ -1091,6 +1199,9 @@
|
||||
"dashboard.affiliate-links.search": {
|
||||
"message": "搜尋聯盟連結..."
|
||||
},
|
||||
"dashboard.analytics.from-projects": {
|
||||
"message": "來自 {count} 個{count, plural, other {專案}}"
|
||||
},
|
||||
"dashboard.analytics.total-downloads": {
|
||||
"message": "總下載量"
|
||||
},
|
||||
@@ -1112,6 +1223,9 @@
|
||||
"dashboard.collections.empty.no-match-hint": {
|
||||
"message": "試試調整篩選器或搜尋字詞。"
|
||||
},
|
||||
"dashboard.collections.label.projects-count": {
|
||||
"message": "{count} 個{countPlural, plural, other {專案}}"
|
||||
},
|
||||
"dashboard.collections.label.search-input": {
|
||||
"message": "搜尋收藏"
|
||||
},
|
||||
@@ -1412,6 +1526,9 @@
|
||||
"dashboard.notifications.link.view-history": {
|
||||
"message": "查看通知紀錄"
|
||||
},
|
||||
"dashboard.notifications.link.view-more": {
|
||||
"message": "查看另外 {extraNotifs} 則{extraNotifs, plural, other {通知}}"
|
||||
},
|
||||
"dashboard.organizations.button.create": {
|
||||
"message": "建立組織"
|
||||
},
|
||||
@@ -1421,6 +1538,9 @@
|
||||
"dashboard.organizations.error.fetch": {
|
||||
"message": "無法取得組織資訊"
|
||||
},
|
||||
"dashboard.organizations.member-count": {
|
||||
"message": "{count} 位{count, plural, other {成員}}"
|
||||
},
|
||||
"dashboard.organizations.title": {
|
||||
"message": "組織"
|
||||
},
|
||||
@@ -1466,6 +1586,9 @@
|
||||
"dashboard.projects.links.button.edit": {
|
||||
"message": "編輯連結"
|
||||
},
|
||||
"dashboard.projects.links.changes-applied": {
|
||||
"message": "變更將套用於<strong>{count}</strong> 個{count, plural, other {專案}}。"
|
||||
},
|
||||
"dashboard.projects.links.description": {
|
||||
"message": "你在下方指定的任何連結都將覆蓋到每個選定的專案中。留空的連結將被忽略。你可以使用垃圾桶按鈕從所有選定的專案中清除連結。"
|
||||
},
|
||||
@@ -1772,6 +1895,9 @@
|
||||
"discover.install.heading.reset-modpack": {
|
||||
"message": "在重設後選擇要安裝的模組包"
|
||||
},
|
||||
"discover.seo.description": {
|
||||
"message": "在 Modrinth 搜尋並瀏覽數千個 Minecraft {projectType},即時獲得精準的搜尋結果。我們的篩選功能可協助你快速找到最優質的 Minecraft {projectType}。"
|
||||
},
|
||||
"discover.seo.title": {
|
||||
"message": "搜尋 {projectType}"
|
||||
},
|
||||
@@ -2640,10 +2766,10 @@
|
||||
"message": "CBU(阿根廷銀行帳戶碼)或 CVU(虛擬帳戶碼)"
|
||||
},
|
||||
"muralpay.help.cci": {
|
||||
"message": "跨行帳戶代碼 (CCI)"
|
||||
"message": "秘魯境內跨行匯款帳號(Código de Cuenta Interbancaria)"
|
||||
},
|
||||
"muralpay.help.clabe": {
|
||||
"message": "銀行標準代碼 (CLABE)"
|
||||
"message": "銀行標準代碼(墨西哥銀行帳號)"
|
||||
},
|
||||
"muralpay.help.cpf-cnpj": {
|
||||
"message": "巴西稅務識別碼"
|
||||
@@ -2768,6 +2894,9 @@
|
||||
"muralpay.warning.wallet-address": {
|
||||
"message": "請仔細檢查你的錢包帳戶。發送到錯誤帳戶的款項將無法追回。"
|
||||
},
|
||||
"organization.settings.projects.edit-links.affected-projects": {
|
||||
"message": "變更將套用於 {count, plural, other {# 個專案}}。"
|
||||
},
|
||||
"profile.bio.fallback.creator": {
|
||||
"message": "一位 Modrinth 創作者。"
|
||||
},
|
||||
@@ -2795,6 +2924,9 @@
|
||||
"profile.button.set-affiliate": {
|
||||
"message": "設為聯盟行銷夥伴"
|
||||
},
|
||||
"profile.collection.projects-count": {
|
||||
"message": "{count, plural, other {# 個專案}}"
|
||||
},
|
||||
"profile.details.label.auth-providers": {
|
||||
"message": "驗證提供者"
|
||||
},
|
||||
@@ -2831,6 +2963,9 @@
|
||||
"profile.label.collection": {
|
||||
"message": "收藏"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "下載次數:{count}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "加入時間"
|
||||
},
|
||||
@@ -2849,6 +2984,9 @@
|
||||
"profile.label.organizations": {
|
||||
"message": "組織"
|
||||
},
|
||||
"profile.label.projects": {
|
||||
"message": "{count} 個{countPlural, plural, other {專案}}"
|
||||
},
|
||||
"profile.label.saving": {
|
||||
"message": "儲存中..."
|
||||
},
|
||||
@@ -2861,6 +2999,12 @@
|
||||
"profile.official-account": {
|
||||
"message": "Modrinth 官方帳號"
|
||||
},
|
||||
"profile.official-account.bio": {
|
||||
"message": "Modrinth 的官方使用者帳號。請至 <support-link></support-link> 取得支援,或透過電子郵件 <email></email> 聯絡客服團隊"
|
||||
},
|
||||
"profile.stats.projects-followers": {
|
||||
"message": "{count, plural, other {<stat>{count}</stat> 位專案追蹤者}}"
|
||||
},
|
||||
"profile.user-id": {
|
||||
"message": "使用者 ID:{id}"
|
||||
},
|
||||
@@ -3119,6 +3263,18 @@
|
||||
"project.license.title": {
|
||||
"message": "授權條款"
|
||||
},
|
||||
"project.moderation.admonition.approved.body.private": {
|
||||
"message": "你的專案目前設為私人,這代表只有你和你邀請的人才能存取。"
|
||||
},
|
||||
"project.moderation.admonition.approved.body.public": {
|
||||
"message": "你的專案已在 Modrinth 上發布並可供他人搜尋探索。"
|
||||
},
|
||||
"project.moderation.admonition.approved.body.unlisted": {
|
||||
"message": "你的專案目前設為不公開,這代表專案只能透過直接連結存取,無法在 Modrinth 上被搜尋到。"
|
||||
},
|
||||
"project.moderation.admonition.approved.body.visibility-message": {
|
||||
"message": "你可以前往專案的<visibility-settings-link>瀏覽權限設定</visibility-settings-link>來變更瀏覽權限。"
|
||||
},
|
||||
"project.moderation.admonition.approved.header": {
|
||||
"message": "專案已獲核准"
|
||||
},
|
||||
@@ -3134,9 +3290,6 @@
|
||||
"project.moderation.admonition.withheld.header": {
|
||||
"message": "由工作人員設為不公開"
|
||||
},
|
||||
"project.moderation.thread.moderator-see-user-ui-toggle": {
|
||||
"message": "顯示成員 UI"
|
||||
},
|
||||
"project.moderation.thread.title": {
|
||||
"message": "審核訊息"
|
||||
},
|
||||
@@ -3239,12 +3392,21 @@
|
||||
"project.settings.permissions.learn-more": {
|
||||
"message": "了解更多"
|
||||
},
|
||||
"project.settings.permissions.search-placeholder": {
|
||||
"message": "搜尋 {count} 個{count, plural, other {外部專案}}..."
|
||||
},
|
||||
"project.settings.title": {
|
||||
"message": "設定"
|
||||
},
|
||||
"project.settings.visit-dashboard": {
|
||||
"message": "前往專案資訊主頁"
|
||||
},
|
||||
"project.stats.downloads-label": {
|
||||
"message": "{count, plural, other {下載}}"
|
||||
},
|
||||
"project.stats.followers-label": {
|
||||
"message": "{count, plural, other {追蹤者}}"
|
||||
},
|
||||
"project.status.archived.message": {
|
||||
"message": "{title} 已封存。{title} 將不會再收到任何後續更新,除非作者決定解除封存該專案。"
|
||||
},
|
||||
@@ -3254,9 +3416,6 @@
|
||||
"project.versions.withheld-versions-warning.description": {
|
||||
"message": "{count, plural, one {這個版本} other {這些版本}}目前被限制存取且不公開。請提供你擁有轉載該模組包{count, plural, other {版本}}版本中特定檔案的許可證明。"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.resolve-button": {
|
||||
"message": "解決"
|
||||
},
|
||||
"project.versions.withheld-versions-warning.title": {
|
||||
"message": "{count, plural, one {版本 {version_name}} other {版本}}因未知的嵌入內容而被限制存取"
|
||||
},
|
||||
@@ -3843,7 +4002,7 @@
|
||||
"message": "雙重驗證"
|
||||
},
|
||||
"settings.account.two-factor.backup.intro": {
|
||||
"message": "請下載並將這些備份碼妥善儲存在安全的地方。如果日後無法存取你的裝置,可以使用這些備份碼來替代雙重驗證碼。請務必像保護密碼一樣妥善保管這些備份碼。"
|
||||
"message": "請下載並將這些備用碼妥善儲存在安全的地方。如果日後無法存取你的裝置,可以使用這些備用碼來替代雙重驗證碼。請務必像保護密碼一樣妥善保管這些備用碼。"
|
||||
},
|
||||
"settings.account.two-factor.backup.single-use": {
|
||||
"message": "備用碼只能使用一次。"
|
||||
|
||||
@@ -881,7 +881,9 @@
|
||||
class="card flex-card"
|
||||
/>
|
||||
<ProjectSidebarCompatibility
|
||||
v-if="projectV3Loaded && !isServerProject"
|
||||
v-if="
|
||||
projectV3Loaded && !isServerProject && route.name !== 'type-project-version-version'
|
||||
"
|
||||
:project="project"
|
||||
:tags="tags"
|
||||
:project-v3="projectV3"
|
||||
|
||||
@@ -72,11 +72,9 @@
|
||||
<h2 id="messages" class="m-0 text-xl font-semibold text-contrast">
|
||||
{{ formatMessage(messages.threadSectionTitle) }}
|
||||
</h2>
|
||||
<div v-if="currentMember?.staffOnly" class="flex items-center gap-2">
|
||||
<div v-if="isStaff(currentMember?.user)" class="flex items-center gap-2">
|
||||
<Toggle id="moderator-see-user-ui-toggle" v-model="moderatorSeeUserUi" small />
|
||||
<label for="moderator-see-user-ui-toggle">
|
||||
{{ formatMessage(messages.moderatorSeeUserUiToggle) }}
|
||||
</label>
|
||||
<label for="moderator-see-user-ui-toggle"> Show member UI </label>
|
||||
</div>
|
||||
</div>
|
||||
<template v-if="userFacingUiVisible">
|
||||
@@ -151,8 +149,9 @@ import {
|
||||
Toggle,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { isStaff } from '@modrinth/utils'
|
||||
import { useQuery, useQueryClient } from '@tanstack/vue-query'
|
||||
import { computed, type Ref, watch } from 'vue'
|
||||
import { computed, watch } from 'vue'
|
||||
|
||||
import ConversationThread from '~/components/ui/thread/ConversationThread.vue'
|
||||
import { getProjectLink, isApproved, isRejected, isUnderReview } from '~/helpers/projects.js'
|
||||
@@ -160,7 +159,6 @@ import { getProjectLink, isApproved, isRejected, isUnderReview } from '~/helpers
|
||||
const { formatMessage } = useVIntl()
|
||||
const flags = useFeatureFlags()
|
||||
|
||||
type ProjectPageMember = Labrinth.Projects.v3.TeamMember & { staffOnly?: boolean }
|
||||
type ModerationAdmonitionSection =
|
||||
| {
|
||||
type: 'paragraph'
|
||||
@@ -181,10 +179,6 @@ const messages = defineMessages({
|
||||
id: 'project.moderation.thread.title',
|
||||
defaultMessage: 'Moderation messages',
|
||||
},
|
||||
moderatorSeeUserUiToggle: {
|
||||
id: 'project.moderation.thread.moderator-see-user-ui-toggle',
|
||||
defaultMessage: 'Show member UI',
|
||||
},
|
||||
threadPrivateDescription: {
|
||||
id: 'project.moderation.thread.private-description',
|
||||
defaultMessage:
|
||||
@@ -213,18 +207,10 @@ const messages = defineMessages({
|
||||
})
|
||||
|
||||
const { addNotification } = injectNotificationManager()
|
||||
const {
|
||||
projectV2: project,
|
||||
currentMember: currentMemberRaw,
|
||||
invalidate,
|
||||
allMembers,
|
||||
} = injectProjectPageContext()
|
||||
const currentMember = currentMemberRaw as Ref<ProjectPageMember | null>
|
||||
const { projectV2: project, currentMember, invalidate, allMembers } = injectProjectPageContext()
|
||||
|
||||
const canAccess = computed(() => !!currentMember.value)
|
||||
const userFacingUiVisible = computed(
|
||||
() => !!currentMember.value && (!currentMember.value.staffOnly || moderatorSeeUserUi.value),
|
||||
)
|
||||
const userFacingUiVisible = computed(() => !!currentMember.value && moderatorSeeUserUi.value)
|
||||
|
||||
const approvedAdmonitionMessage = computed<MessageDescriptor | null>(() => {
|
||||
switch (project.value?.status) {
|
||||
|
||||
@@ -17,6 +17,7 @@ import {
|
||||
commonMessages,
|
||||
commonProjectSettingsMessages,
|
||||
injectProjectPageContext,
|
||||
Toggle,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { isStaff } from '@modrinth/utils'
|
||||
@@ -47,10 +48,8 @@ const navItems = computed(() => {
|
||||
projectV3.value?.project_types?.some((type) => ['mod', 'modpack'].includes(type)) &&
|
||||
isStaff(currentMember.value?.user)
|
||||
|
||||
const hasPermissionsPage = computed(
|
||||
() =>
|
||||
flags.value.modpackPermissionsPage &&
|
||||
projectV3.value?.project_types?.some((type) => ['modpack'].includes(type)),
|
||||
const hasPermissionsPage = computed(() =>
|
||||
projectV3.value?.project_types?.some((type) => ['modpack'].includes(type)),
|
||||
)
|
||||
|
||||
const items = [
|
||||
@@ -82,16 +81,16 @@ const navItems = computed(() => {
|
||||
label: formatMessage(commonProjectSettingsMessages.description),
|
||||
icon: AlignLeftIcon,
|
||||
},
|
||||
hasPermissionsPage.value && {
|
||||
link: `/${base}/settings/permissions`,
|
||||
label: formatMessage(commonProjectSettingsMessages.permissions),
|
||||
icon: SignatureIcon,
|
||||
},
|
||||
!isServerProject.value && {
|
||||
link: `/${base}/settings/versions`,
|
||||
label: formatMessage(commonProjectSettingsMessages.versions),
|
||||
icon: VersionIcon,
|
||||
},
|
||||
hasPermissionsPage.value && {
|
||||
link: `/${base}/settings/permissions`,
|
||||
label: formatMessage(commonProjectSettingsMessages.permissions),
|
||||
icon: SignatureIcon,
|
||||
},
|
||||
!isServerProject.value && {
|
||||
link: `/${base}/settings/license`,
|
||||
label: formatMessage(commonProjectSettingsMessages.license),
|
||||
@@ -144,6 +143,16 @@ watch(route, () => {
|
||||
const scrollY = scroll.y.value
|
||||
setTimeout(() => window.scrollTo(0, scrollY), 10)
|
||||
})
|
||||
|
||||
const moderatorSeeUserUi = computed<boolean>({
|
||||
get() {
|
||||
return flags.value.showModeratorProjectMemberUi
|
||||
},
|
||||
set(value: boolean) {
|
||||
flags.value.showModeratorProjectMemberUi = value
|
||||
saveFeatureFlags()
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -167,6 +176,10 @@ watch(route, () => {
|
||||
<div class="grid gap-4 lg:grid-cols-[1fr_3fr]">
|
||||
<div>
|
||||
<NavStack :items="navItems" />
|
||||
<div v-if="isStaff(currentMember?.user)" class="mt-4 flex items-center gap-2">
|
||||
<Toggle id="moderator-see-user-ui-toggle" v-model="moderatorSeeUserUi" small />
|
||||
<label for="moderator-see-user-ui-toggle"> Show member UI </label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="min-w-0">
|
||||
<NuxtPage />
|
||||
|
||||
@@ -1,51 +1,303 @@
|
||||
<script setup lang="ts">
|
||||
import { RightArrowIcon, SearchIcon, SortAscIcon, SortDescIcon } from '@modrinth/assets'
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import {
|
||||
ArrowDown10Icon,
|
||||
ArrowDownWideNarrowIcon,
|
||||
ClockArrowDownIcon,
|
||||
FoldVerticalIcon,
|
||||
PauseIcon,
|
||||
RightArrowIcon,
|
||||
ScaleIcon,
|
||||
SearchIcon,
|
||||
UnfoldVerticalIcon,
|
||||
XCircleIcon,
|
||||
} from '@modrinth/assets'
|
||||
import {
|
||||
Admonition,
|
||||
ButtonStyled,
|
||||
Combobox,
|
||||
type ComboboxOption,
|
||||
commonMessages,
|
||||
createAttributionGroupTitle,
|
||||
defineMessage,
|
||||
defineMessages,
|
||||
EmptyState,
|
||||
ExternalProjectPermissionsCard,
|
||||
injectModrinthClient,
|
||||
injectProjectPageContext,
|
||||
IntlFormatted,
|
||||
StyledInput,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import ExternalProjectPermissionsCard from '@modrinth/ui/src/components/external_files/ExternalProjectPermissionsCard.vue'
|
||||
import { ref } from 'vue'
|
||||
import { isStaff } from '@modrinth/utils'
|
||||
import { useQuery } from '@tanstack/vue-query'
|
||||
import { computed, ref, watch } from 'vue'
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
import { setupAttributionModerationProvider } from '~/providers/setup/attribution-moderation'
|
||||
|
||||
setupAttributionModerationProvider()
|
||||
|
||||
const auth = await useAuth()
|
||||
const flags = useFeatureFlags()
|
||||
|
||||
if (!flags.value.modpackPermissionsPage) {
|
||||
throw createError({
|
||||
fatal: true,
|
||||
statusCode: 404,
|
||||
})
|
||||
const isModerator = computed(() => {
|
||||
return isStaff(auth.value?.user) && !flags.value.showModeratorProjectMemberUi
|
||||
})
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
const { projectV2: project } = injectProjectPageContext()
|
||||
const { labrinth } = injectModrinthClient()
|
||||
|
||||
type SortType = 'status' | 'most_files' | 'recently_edited' | 'rejected'
|
||||
|
||||
const searchQuery = ref('')
|
||||
const currentSortType = ref<SortType>('status')
|
||||
const cardCollapsedById = ref<Record<string, boolean>>({})
|
||||
|
||||
const {
|
||||
data: attributionData,
|
||||
error: attributionError,
|
||||
isPending: pending,
|
||||
} = useQuery<Labrinth.Attribution.Internal.AttributionGroup[]>({
|
||||
queryKey: ['project-attribution', project.value.id],
|
||||
queryFn: () => labrinth.attribution_internal.listProjectAttribution(project.value.id),
|
||||
})
|
||||
|
||||
const sortRejectedLabel = defineMessage({
|
||||
id: 'project.settings.permissions.sort.rejected',
|
||||
defaultMessage: 'Rejected',
|
||||
})
|
||||
|
||||
const sortTypes = computed<ComboboxOption<SortType>[]>(() => {
|
||||
const options: ComboboxOption<SortType>[] = [
|
||||
{
|
||||
value: 'status',
|
||||
label: formatMessage(
|
||||
defineMessage({
|
||||
id: 'project.settings.permissions.sort.status',
|
||||
defaultMessage: 'Status',
|
||||
}),
|
||||
),
|
||||
},
|
||||
{
|
||||
value: 'most_files',
|
||||
label: formatMessage(
|
||||
defineMessage({
|
||||
id: 'project.settings.permissions.sort.most-files',
|
||||
defaultMessage: 'Most files',
|
||||
}),
|
||||
),
|
||||
},
|
||||
{
|
||||
value: 'recently_edited',
|
||||
label: formatMessage(
|
||||
defineMessage({
|
||||
id: 'project.settings.permissions.sort.recently-edited',
|
||||
defaultMessage: 'Recently edited',
|
||||
}),
|
||||
),
|
||||
},
|
||||
]
|
||||
if (hasMixedModerationStatus.value) {
|
||||
options.push({
|
||||
value: 'rejected',
|
||||
label: formatMessage(sortRejectedLabel),
|
||||
})
|
||||
}
|
||||
return options
|
||||
})
|
||||
|
||||
const currentSortLabel = computed(() => {
|
||||
return sortTypes.value.find((option) => option.value === currentSortType.value)?.label ?? ''
|
||||
})
|
||||
|
||||
function isAttributed(group: Labrinth.Attribution.Internal.AttributionGroup): boolean {
|
||||
return !!group.attribution && !isNoPermission(group)
|
||||
}
|
||||
|
||||
const externalFiles = ref([{}])
|
||||
const searchQuery = ref('')
|
||||
const currentSortType = ref('Oldest')
|
||||
function isNoPermission(group: Labrinth.Attribution.Internal.AttributionGroup): boolean {
|
||||
return group.attribution?.kind === 'no_permission'
|
||||
}
|
||||
|
||||
function isModerationRejected(group: Labrinth.Attribution.Internal.AttributionGroup): boolean {
|
||||
const kind = group.attribution?.moderation_status?.kind
|
||||
return kind === 'bad_proof' || kind === 'not_allowed'
|
||||
}
|
||||
|
||||
function isNotAllowed(group: Labrinth.Attribution.Internal.AttributionGroup): boolean {
|
||||
return group.attribution?.moderation_status?.kind === 'not_allowed'
|
||||
}
|
||||
|
||||
function isBadProof(group: Labrinth.Attribution.Internal.AttributionGroup): boolean {
|
||||
return group.attribution?.moderation_status?.kind === 'bad_proof'
|
||||
}
|
||||
|
||||
function needsModerationApproval(group: Labrinth.Attribution.Internal.AttributionGroup): boolean {
|
||||
const attribution = group.attribution
|
||||
if (!attribution || attribution.kind === 'globally_allowed') {
|
||||
return false
|
||||
}
|
||||
return !attribution.moderation_status
|
||||
}
|
||||
|
||||
function rejectedSortRank(group: Labrinth.Attribution.Internal.AttributionGroup): number {
|
||||
if (isModerationRejected(group)) {
|
||||
return 0
|
||||
}
|
||||
if (group.attribution?.moderation_status?.kind === 'approved') {
|
||||
return 1
|
||||
}
|
||||
return 2
|
||||
}
|
||||
|
||||
const hasMixedModerationStatus = computed(() => {
|
||||
const groups = attributionData.value ?? []
|
||||
let hasRejected = false
|
||||
let hasNonRejected = false
|
||||
for (const group of groups) {
|
||||
if (isModerationRejected(group)) {
|
||||
hasRejected = true
|
||||
} else {
|
||||
hasNonRejected = true
|
||||
}
|
||||
if (hasRejected && hasNonRejected) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
})
|
||||
|
||||
watch(hasMixedModerationStatus, (mixed) => {
|
||||
if (!mixed && currentSortType.value === 'rejected') {
|
||||
currentSortType.value = 'status'
|
||||
}
|
||||
})
|
||||
|
||||
function statusSortRank(group: Labrinth.Attribution.Internal.AttributionGroup): number {
|
||||
if (isNoPermission(group)) {
|
||||
return 0
|
||||
} else if (!group.attribution) {
|
||||
return 1
|
||||
} else if (group.attribution?.kind === 'globally_allowed') {
|
||||
return 3
|
||||
} else {
|
||||
return 2
|
||||
}
|
||||
}
|
||||
|
||||
function alphabetSortKey(group: Labrinth.Attribution.Internal.AttributionGroup): string {
|
||||
return createAttributionGroupTitle(group, formatMessage)
|
||||
}
|
||||
|
||||
function compareAlphabetical(
|
||||
a: Labrinth.Attribution.Internal.AttributionGroup,
|
||||
b: Labrinth.Attribution.Internal.AttributionGroup,
|
||||
): number {
|
||||
return alphabetSortKey(a).localeCompare(alphabetSortKey(b), undefined, { sensitivity: 'base' })
|
||||
}
|
||||
|
||||
function attributedTimestamp(group: Labrinth.Attribution.Internal.AttributionGroup): number {
|
||||
if (!group.attributed_at) return Number.NEGATIVE_INFINITY
|
||||
const t = Date.parse(group.attributed_at)
|
||||
return Number.isNaN(t) ? Number.NEGATIVE_INFINITY : t
|
||||
}
|
||||
|
||||
function groupMatchesPermissionsSearch(
|
||||
group: Labrinth.Attribution.Internal.AttributionGroup,
|
||||
queryTrimmed: string,
|
||||
): boolean {
|
||||
const query = queryTrimmed.toLowerCase()
|
||||
if (group.flame_project?.title?.toLowerCase().includes(query)) {
|
||||
return true
|
||||
}
|
||||
return (group.files ?? []).some((file) => file.name.toLowerCase().includes(query))
|
||||
}
|
||||
|
||||
const filteredGroups = computed(() => {
|
||||
const groups = attributionData.value ?? []
|
||||
const queryTrimmed = searchQuery.value.trim()
|
||||
const filtered = queryTrimmed
|
||||
? groups.filter((group) => groupMatchesPermissionsSearch(group, queryTrimmed))
|
||||
: [...groups]
|
||||
const sortMode = currentSortType.value
|
||||
filtered.sort(compareAlphabetical)
|
||||
filtered.sort((a, b) => {
|
||||
if (sortMode === 'status') {
|
||||
return statusSortRank(a) - statusSortRank(b)
|
||||
}
|
||||
if (sortMode === 'most_files') {
|
||||
const ac = a.files?.length ?? 0
|
||||
const bc = b.files?.length ?? 0
|
||||
return bc - ac
|
||||
}
|
||||
if (sortMode === 'rejected') {
|
||||
return rejectedSortRank(a) - rejectedSortRank(b)
|
||||
}
|
||||
const at = attributedTimestamp(a)
|
||||
const bt = attributedTimestamp(b)
|
||||
return bt - at
|
||||
})
|
||||
return filtered
|
||||
})
|
||||
|
||||
const totalGroups = computed(() => attributionData.value?.length ?? 0)
|
||||
|
||||
const stats = computed(() => {
|
||||
const groups = attributionData.value ?? []
|
||||
let attributed = 0
|
||||
let pending = 0
|
||||
let noPermission = 0
|
||||
for (const group of groups) {
|
||||
if (isNoPermission(group)) {
|
||||
noPermission++
|
||||
} else if (isAttributed(group)) {
|
||||
attributed++
|
||||
} else {
|
||||
pending++
|
||||
}
|
||||
}
|
||||
return { total: groups.length, attributed, pending, noPermission }
|
||||
})
|
||||
|
||||
const pendingApprovalCount = computed(() => {
|
||||
const groups = attributionData.value ?? []
|
||||
return groups.filter(needsModerationApproval).length
|
||||
})
|
||||
|
||||
const noPermissionCount = computed(() => {
|
||||
const groups = attributionData.value ?? []
|
||||
return groups.filter((group) => group.attribution?.kind === 'no_permission').length
|
||||
})
|
||||
|
||||
const notAllowedCount = computed(() => {
|
||||
const groups = attributionData.value ?? []
|
||||
return groups.filter(isNotAllowed).length
|
||||
})
|
||||
|
||||
const badProofCount = computed(() => {
|
||||
const groups = attributionData.value ?? []
|
||||
return groups.filter(isBadProof).length
|
||||
})
|
||||
|
||||
const pendingCount = computed(() => {
|
||||
const groups = attributionData.value ?? []
|
||||
return groups.filter((group) => !group.attribution || isModerationRejected(group)).length
|
||||
})
|
||||
|
||||
const projectIsApproved = computed(() => project.value.status === 'approved')
|
||||
|
||||
const sortTypes: ComboboxOption<string>[] = [
|
||||
{ value: 'Oldest', label: 'Oldest' },
|
||||
{ value: 'Newest', label: 'Newest' },
|
||||
]
|
||||
const messages = defineMessages({
|
||||
searchPlaceholder: {
|
||||
id: 'project.settings.permissions.search-placeholder',
|
||||
defaultMessage:
|
||||
'Search {count} {count, plural, one {external project} other {external projects}}...',
|
||||
defaultMessage: 'Search {count} {count, plural, one {project} other {projects}}...',
|
||||
},
|
||||
infoBannerTitle: {
|
||||
id: 'project.settings.permissions.info-banner.title',
|
||||
defaultMessage: 'Learn how attributions work',
|
||||
defaultMessage: 'Learn about distribution permissions',
|
||||
},
|
||||
infoBannerDescription: {
|
||||
id: 'project.settings.permissions.info-banner.description',
|
||||
defaultMessage: `If you include content that isn’t hosted on Modrinth, you need to let us know where it’s from and verify that you have permission to distribute the files. Check out <link>our guide</link> to learn about how to do this properly!`,
|
||||
defaultMessage: `If you include content that isn’t hosted on Modrinth, you need to let us know where it’s from and verify that you have permission to distribute the files. Check out <link>our announcement of this new system</link> to learn more!`,
|
||||
},
|
||||
learnMore: {
|
||||
id: 'project.settings.permissions.learn-more',
|
||||
@@ -57,15 +309,16 @@ const messages = defineMessages({
|
||||
},
|
||||
emptyStateDescription: {
|
||||
id: 'project.settings.permissions.empty-state.description',
|
||||
defaultMessage: `None of your versions contain external content, so you don't need to worry about obtaining permissions.`,
|
||||
defaultMessage: `None of your project's versions contain external content, so you don't need to worry about obtaining permissions.`,
|
||||
},
|
||||
completedTitle: {
|
||||
id: 'project.settings.permissions.completed.title',
|
||||
defaultMessage: `Attributions completed!`,
|
||||
defaultMessage: `Permissions completed!`,
|
||||
},
|
||||
completedDescription: {
|
||||
id: 'project.settings.permissions.completed.description',
|
||||
defaultMessage: 'All external content has attributions provided.',
|
||||
defaultMessage:
|
||||
'All external content has permission information and attributions have been provided.',
|
||||
},
|
||||
failTitle: {
|
||||
id: 'project.settings.permissions.fail.title',
|
||||
@@ -73,107 +326,280 @@ const messages = defineMessages({
|
||||
},
|
||||
failDescription: {
|
||||
id: 'project.settings.permissions.fail.description',
|
||||
defaultMessage: `You don't have permission to redistribute some of the external content you've added. In order to publish on Modrinth, remove the infringing content.`,
|
||||
defaultMessage: `You may not have permission to redistribute some of the external content in your project. In order to publish on Modrinth, please remove this content or provide proof that you do have permission to use it.`,
|
||||
},
|
||||
notAllowedDescription: {
|
||||
id: 'project.settings.permissions.not-allowed.description',
|
||||
defaultMessage: `Some of the external content included cannot be distributed on Modrinth because it violates our Content Rules and must be removed.`,
|
||||
},
|
||||
badProofTitle: {
|
||||
id: 'project.settings.permissions.bad-proof.title',
|
||||
defaultMessage: `Some proofs were rejected`,
|
||||
},
|
||||
badProofDescription: {
|
||||
id: 'project.settings.permissions.bad-proof.description',
|
||||
defaultMessage: `Modrinth's moderation team has rejected the permission information you provided for some external content. Please review the rejected items below and provide acceptable proof or remove the content.`,
|
||||
},
|
||||
attentionNeededTitle: {
|
||||
id: 'project.settings.permissions.attention-needed.title',
|
||||
defaultMessage: `Unknown embedded content`,
|
||||
defaultMessage: `Unknown external content`,
|
||||
},
|
||||
attentionNeededDescriptionApproved: {
|
||||
id: 'project.settings.permissions.attention-needed.description.proj-approved',
|
||||
defaultMessage: `Please provide proof that you have permission to redistribute all of the following files and any withheld versions will be automatically published.`,
|
||||
defaultMessage: `Please provide proof that you have permission to redistribute all of the following files. Once completed, withheld versions will be automatically published.`,
|
||||
},
|
||||
attentionNeededDescriptionDraft: {
|
||||
id: 'project.settings.permissions.attention-needed.description.proj-draft',
|
||||
defaultMessage: `Please provide proof that you have permission to redistribute all of the following files before you can submit your project for review.`,
|
||||
defaultMessage: `Please provide proof that you have permission to redistribute all of the following files before submitting your project for review.`,
|
||||
},
|
||||
noResults: {
|
||||
id: 'project.settings.permissions.no-results',
|
||||
defaultMessage: 'No external files match your search.',
|
||||
},
|
||||
collapseAll: {
|
||||
id: 'project.settings.permissions.collapse-all',
|
||||
defaultMessage: 'Collapse all',
|
||||
},
|
||||
expandAll: {
|
||||
id: 'project.settings.permissions.expand-all',
|
||||
defaultMessage: 'Expand all',
|
||||
},
|
||||
pendingApprovalCount: {
|
||||
id: 'project.settings.permissions.pending-approval-count',
|
||||
defaultMessage:
|
||||
'{count, plural, =0 {No attributions need approval} one {# attribution needs approval} other {# attributions need approval}}',
|
||||
},
|
||||
})
|
||||
|
||||
function defaultCardCollapsed(group: Labrinth.Attribution.Internal.AttributionGroup): boolean {
|
||||
if (group?.attribution?.kind === 'globally_allowed') {
|
||||
return true
|
||||
}
|
||||
if (!isModerator.value) {
|
||||
const hasAttribution = !!group.attribution
|
||||
const rejectedProof = group.attribution?.moderation_status?.kind === 'bad_proof'
|
||||
return hasAttribution && !rejectedProof
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
function getCardCollapsed(group: Labrinth.Attribution.Internal.AttributionGroup): boolean {
|
||||
return cardCollapsedById.value[group.id] ?? defaultCardCollapsed(group)
|
||||
}
|
||||
|
||||
function setCardCollapsed(groupId: string, collapsed: boolean) {
|
||||
cardCollapsedById.value = { ...cardCollapsedById.value, [groupId]: collapsed }
|
||||
}
|
||||
|
||||
const allCardsCollapsed = computed(() => {
|
||||
const groups = filteredGroups.value
|
||||
if (groups.length === 0) {
|
||||
return true
|
||||
}
|
||||
return groups.every((group) => getCardCollapsed(group))
|
||||
})
|
||||
|
||||
const expandCollapseAllLabel = computed(() =>
|
||||
formatMessage(allCardsCollapsed.value ? messages.expandAll : messages.collapseAll),
|
||||
)
|
||||
|
||||
function toggleAllCardsCollapsed() {
|
||||
const collapsed = !allCardsCollapsed.value
|
||||
const next = { ...cardCollapsedById.value }
|
||||
for (const group of filteredGroups.value) {
|
||||
next[group.id] = collapsed
|
||||
}
|
||||
cardCollapsedById.value = next
|
||||
}
|
||||
|
||||
function dismissInfoBanner() {
|
||||
flags.value.dismissedExternalProjectsInfo = true
|
||||
saveFeatureFlags()
|
||||
}
|
||||
</script>
|
||||
<template>
|
||||
<template v-if="externalFiles.length > 0">
|
||||
<Admonition
|
||||
v-if="!flags.dismissedExternalProjectsInfo"
|
||||
type="info"
|
||||
class="mb-4"
|
||||
:header="formatMessage(messages.infoBannerTitle)"
|
||||
dismissible
|
||||
@dismiss="dismissInfoBanner"
|
||||
>
|
||||
<IntlFormatted :message-id="messages.infoBannerDescription">
|
||||
<template #link="{ children }">
|
||||
<a class="text-link" target="_blank"> <component :is="() => children" /> </a>
|
||||
</template>
|
||||
</IntlFormatted>
|
||||
<template #actions>
|
||||
<div class="flex">
|
||||
<ButtonStyled color="blue">
|
||||
<a> {{ formatMessage(messages.learnMore) }} <RightArrowIcon /> </a>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
<Admonition
|
||||
v-if="!flags.dismissedExternalProjectsInfo && !isModerator"
|
||||
type="info"
|
||||
class="mb-4"
|
||||
:header="formatMessage(messages.infoBannerTitle)"
|
||||
dismissible
|
||||
@dismiss="dismissInfoBanner"
|
||||
>
|
||||
<IntlFormatted :message-id="messages.infoBannerDescription">
|
||||
<template #link="{ children }">
|
||||
<nuxt-link class="text-link" to="/news/article/modpack-permissions/" target="_blank">
|
||||
<component :is="() => children" />
|
||||
</nuxt-link>
|
||||
</template>
|
||||
</Admonition>
|
||||
<Admonition
|
||||
v-if="true"
|
||||
type="success"
|
||||
class="mb-4"
|
||||
:header="formatMessage(messages.completedTitle)"
|
||||
:body="formatMessage(messages.completedDescription)"
|
||||
/>
|
||||
<Admonition
|
||||
v-if="true"
|
||||
type="warning"
|
||||
class="mb-4"
|
||||
:header="formatMessage(messages.attentionNeededTitle)"
|
||||
:body="formatMessage(messages.attentionNeededDescriptionDraft)"
|
||||
/>
|
||||
<Admonition
|
||||
v-if="true"
|
||||
type="critical"
|
||||
class="mb-4"
|
||||
:header="formatMessage(messages.failTitle)"
|
||||
:body="formatMessage(messages.failDescription)"
|
||||
/>
|
||||
<div class="grid grid-cols-[1fr_auto] gap-2">
|
||||
<StyledInput
|
||||
v-model="searchQuery"
|
||||
type="search"
|
||||
:placeholder="
|
||||
formatMessage(messages.searchPlaceholder, {
|
||||
count: externalFiles.length,
|
||||
})
|
||||
"
|
||||
:icon="SearchIcon"
|
||||
input-class="h-[40px]"
|
||||
/>
|
||||
<div>
|
||||
<Combobox
|
||||
v-model="currentSortType"
|
||||
class="!w-full flex-grow sm:!w-[150px] sm:flex-grow-0 lg:!w-[150px]"
|
||||
:options="sortTypes"
|
||||
:placeholder="formatMessage(commonMessages.sortByLabel)"
|
||||
>
|
||||
<template #selected>
|
||||
<span class="flex flex-row gap-2 align-middle font-semibold">
|
||||
<SortAscIcon
|
||||
v-if="currentSortType === 'Oldest'"
|
||||
class="size-5 flex-shrink-0 text-secondary"
|
||||
/>
|
||||
<SortDescIcon v-else class="size-5 flex-shrink-0 text-secondary" />
|
||||
<span class="truncate text-contrast">{{ currentSortType }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</Combobox>
|
||||
</IntlFormatted>
|
||||
<template #actions>
|
||||
<div class="flex">
|
||||
<ButtonStyled color="blue">
|
||||
<a> {{ formatMessage(messages.learnMore) }} <RightArrowIcon /> </a>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-4 flex flex-col gap-3">
|
||||
<ExternalProjectPermissionsCard title="FTB Library" />
|
||||
</template>
|
||||
</Admonition>
|
||||
<template v-if="pending">
|
||||
<div class="flex flex-col gap-3">
|
||||
<div
|
||||
v-for="i in 3"
|
||||
:key="i"
|
||||
class="h-[56px] w-full animate-pulse rounded-2xl bg-surface-3"
|
||||
></div>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else-if="totalGroups > 0">
|
||||
<template v-if="!isModerator">
|
||||
<Admonition
|
||||
v-if="
|
||||
stats.pending === 0 &&
|
||||
stats.noPermission === 0 &&
|
||||
notAllowedCount === 0 &&
|
||||
badProofCount === 0
|
||||
"
|
||||
type="success"
|
||||
class="mb-4"
|
||||
:header="formatMessage(messages.completedTitle)"
|
||||
:body="formatMessage(messages.completedDescription)"
|
||||
/>
|
||||
<Admonition
|
||||
v-else-if="notAllowedCount > 0"
|
||||
type="critical"
|
||||
class="mb-4"
|
||||
:header="formatMessage(messages.failTitle)"
|
||||
:body="formatMessage(messages.notAllowedDescription)"
|
||||
/>
|
||||
<Admonition
|
||||
v-else-if="stats.noPermission > 0"
|
||||
type="critical"
|
||||
class="mb-4"
|
||||
:header="formatMessage(messages.failTitle)"
|
||||
:body="formatMessage(messages.failDescription)"
|
||||
/>
|
||||
<Admonition
|
||||
v-else-if="badProofCount > 0"
|
||||
type="critical"
|
||||
class="mb-4"
|
||||
:header="formatMessage(messages.badProofTitle)"
|
||||
:body="formatMessage(messages.badProofDescription)"
|
||||
/>
|
||||
<Admonition
|
||||
v-else-if="stats.pending > 0"
|
||||
type="warning"
|
||||
class="mb-4"
|
||||
:header="formatMessage(messages.attentionNeededTitle)"
|
||||
:body="
|
||||
formatMessage(
|
||||
projectIsApproved
|
||||
? messages.attentionNeededDescriptionApproved
|
||||
: messages.attentionNeededDescriptionDraft,
|
||||
)
|
||||
"
|
||||
/>
|
||||
</template>
|
||||
<div class="flex flex-col gap-2">
|
||||
<div class="grid grid-cols-[1fr_auto_auto] gap-2">
|
||||
<StyledInput
|
||||
v-model="searchQuery"
|
||||
type="text"
|
||||
autocomplete="off"
|
||||
clearable
|
||||
:placeholder="
|
||||
formatMessage(messages.searchPlaceholder, {
|
||||
count: totalGroups,
|
||||
})
|
||||
"
|
||||
:icon="SearchIcon"
|
||||
input-class="h-[40px]"
|
||||
/>
|
||||
<div>
|
||||
<Combobox
|
||||
v-model="currentSortType"
|
||||
class="!w-full flex-grow sm:!w-[220px] sm:flex-grow-0 [&>span]:h-[40px]"
|
||||
:options="sortTypes"
|
||||
:placeholder="formatMessage(commonMessages.sortByLabel)"
|
||||
>
|
||||
<template #selected>
|
||||
<span class="flex flex-row gap-2 align-middle font-semibold">
|
||||
<ArrowDownWideNarrowIcon
|
||||
v-if="currentSortType === 'status'"
|
||||
class="size-5 flex-shrink-0 text-secondary"
|
||||
/>
|
||||
<ArrowDown10Icon
|
||||
v-else-if="currentSortType === 'most_files'"
|
||||
class="size-5 flex-shrink-0 text-secondary"
|
||||
/>
|
||||
<ClockArrowDownIcon
|
||||
v-else-if="currentSortType === 'recently_edited'"
|
||||
class="size-5 flex-shrink-0 text-secondary"
|
||||
/>
|
||||
<ArrowDownWideNarrowIcon
|
||||
v-else-if="currentSortType === 'rejected'"
|
||||
class="size-5 flex-shrink-0 text-secondary"
|
||||
/>
|
||||
<span class="truncate text-contrast">{{ currentSortLabel }}</span>
|
||||
</span>
|
||||
</template>
|
||||
</Combobox>
|
||||
</div>
|
||||
<ButtonStyled>
|
||||
<button type="button" class="!h-[40px]" @click="toggleAllCardsCollapsed">
|
||||
<UnfoldVerticalIcon
|
||||
v-if="allCardsCollapsed"
|
||||
class="size-5 flex-shrink-0 text-secondary"
|
||||
/>
|
||||
<FoldVerticalIcon v-else class="size-5 flex-shrink-0 text-secondary" />
|
||||
{{ expandCollapseAllLabel }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="isModerator" class="mt-4 flex flex-wrap items-center gap-3">
|
||||
<template v-if="noPermissionCount > 0">
|
||||
<span class="flex items-center gap-1 text-red">
|
||||
<XCircleIcon class="size-4 shrink-0" /> {{ noPermissionCount }} with no permission
|
||||
</span>
|
||||
<span class="text-surface-5">•</span>
|
||||
</template>
|
||||
<template v-if="pendingCount > 0">
|
||||
<span class="flex items-center gap-1 text-orange">
|
||||
<PauseIcon class="size-4 shrink-0" /> {{ pendingCount }} need user action
|
||||
</span>
|
||||
<span class="text-surface-5">•</span>
|
||||
</template>
|
||||
<span v-if="pendingApprovalCount > 0" class="flex items-center gap-1 text-contrast">
|
||||
<ScaleIcon class="size-4 shrink-0" /> {{ pendingApprovalCount }} awaiting review
|
||||
</span>
|
||||
<span v-else class="flex items-center gap-1 text-secondary">
|
||||
<ScaleIcon class="size-4 shrink-0" /> None awaiting review
|
||||
</span>
|
||||
</div>
|
||||
<div class="mt-4 flex flex-col gap-3">
|
||||
<TransitionGroup name="list">
|
||||
<ExternalProjectPermissionsCard
|
||||
v-for="group in filteredGroups"
|
||||
:key="group.id"
|
||||
:collapsed="getCardCollapsed(group)"
|
||||
:project-id="project.id"
|
||||
:group="group"
|
||||
:is-moderator="isModerator"
|
||||
@update:collapsed="setCardCollapsed(group.id, $event)"
|
||||
/>
|
||||
<EmptyState
|
||||
v-if="filteredGroups.length === 0"
|
||||
:heading="formatMessage(messages.noResults)"
|
||||
type="no-search-result"
|
||||
/>
|
||||
</TransitionGroup>
|
||||
</div>
|
||||
</template>
|
||||
<div v-else-if="attributionError">
|
||||
<p v-if="attributionError" class="my-12 text-center text-red">
|
||||
{{ attributionError }}
|
||||
</p>
|
||||
</div>
|
||||
<template v-else>
|
||||
<EmptyState
|
||||
:heading="formatMessage(messages.emptyStateHeading)"
|
||||
@@ -182,3 +608,18 @@ function dismissInfoBanner() {
|
||||
/>
|
||||
</template>
|
||||
</template>
|
||||
<style scoped>
|
||||
.list-enter-from {
|
||||
opacity: 0;
|
||||
transform: translateY(-10px);
|
||||
}
|
||||
|
||||
.list-leave-to {
|
||||
opacity: 0;
|
||||
transform: translateY(10px);
|
||||
}
|
||||
|
||||
.list-move {
|
||||
transition: transform 200ms ease-in-out;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -14,21 +14,22 @@
|
||||
proceed-label="Delete"
|
||||
@proceed="deleteVersion()"
|
||||
/>
|
||||
|
||||
<Admonition
|
||||
v-if="flags.modpackPermissionsPage && withheldVersions.length > 0"
|
||||
type="warning"
|
||||
v-if="withheldVersions.length > 0"
|
||||
type="circle-warning"
|
||||
class="mb-4"
|
||||
:header="
|
||||
formatMessage(messages.withheldVersionsWarningTitle, {
|
||||
count: withheldVersions.length,
|
||||
version_name: withheldVersions.length === 1 ? withheldVersions[0] : undefined,
|
||||
version_name:
|
||||
withheldVersions.length === 1 ? withheldVersions[0].version_number : undefined,
|
||||
})
|
||||
"
|
||||
:body="
|
||||
formatMessage(messages.withheldVersionsWarningDescription, {
|
||||
count: withheldVersions.length,
|
||||
version_name: withheldVersions.length === 1 ? withheldVersions[0] : undefined,
|
||||
version_name:
|
||||
withheldVersions.length === 1 ? withheldVersions[0].version_number : undefined,
|
||||
})
|
||||
"
|
||||
>
|
||||
@@ -40,7 +41,8 @@
|
||||
project.slug ? project.slug : project.id
|
||||
}/settings/permissions`"
|
||||
>
|
||||
{{ formatMessage(messages.withheldVersionsWarningResolve) }} <RightArrowIcon />
|
||||
{{ formatMessage(commonProjectSettingsMessages.withheldVersionsWarningResolve) }}
|
||||
<RightArrowIcon />
|
||||
</nuxt-link>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
@@ -333,6 +335,7 @@ import {
|
||||
import {
|
||||
Admonition,
|
||||
ButtonStyled,
|
||||
commonProjectSettingsMessages,
|
||||
ConfirmModal,
|
||||
defineMessages,
|
||||
injectModrinthClient,
|
||||
@@ -458,7 +461,9 @@ async function deleteVersion() {
|
||||
stopLoading()
|
||||
}
|
||||
|
||||
const withheldVersions = computed(() => ['4.0.0'])
|
||||
const withheldVersions = computed(() =>
|
||||
versions.value.filter((x) => x.files_missing_attribution?.length > 0),
|
||||
)
|
||||
|
||||
const messages = defineMessages({
|
||||
withheldVersionsWarningTitle: {
|
||||
@@ -471,9 +476,5 @@ const messages = defineMessages({
|
||||
defaultMessage:
|
||||
'{count, plural, one {This version is} other {These versions are}} currently withheld and not publicly listed. Please provide proof that you have permission to redistribute certain files included in the modpack {count, plural, one {version} other {versions}}.',
|
||||
},
|
||||
withheldVersionsWarningResolve: {
|
||||
id: 'project.versions.withheld-versions-warning.resolve-button',
|
||||
defaultMessage: 'Resolve',
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -448,6 +448,7 @@ import {
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
DropdownSelect,
|
||||
injectModrinthClient,
|
||||
IntlFormatted,
|
||||
ProjectCard,
|
||||
StyledInput,
|
||||
@@ -464,6 +465,7 @@ import { homePageNotifs, homePageProjects, homePageSearch } from '~/generated/st
|
||||
const formatRelativeTime = useRelativeTime()
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
const { labrinth } = injectModrinthClient()
|
||||
|
||||
const searchQuery = ref('leave')
|
||||
const sortType = ref('relevance')
|
||||
@@ -473,8 +475,8 @@ const PROJECT_COUNT = 100000
|
||||
|
||||
const auth = await useAuth()
|
||||
|
||||
const newProjects = homePageProjects?.slice(0, 40)
|
||||
const val = Math.ceil(newProjects?.length / 3)
|
||||
const newProjects = homePageProjects?.slice(0, 40) ?? []
|
||||
const val = Math.ceil(newProjects.length / 3)
|
||||
const rows = ref(
|
||||
newProjects.length > 0
|
||||
? [
|
||||
@@ -489,11 +491,25 @@ const notifications = ref(homePageNotifs?.hits ?? [])
|
||||
const searchProjects = ref(homePageSearch?.hits ?? [])
|
||||
|
||||
async function updateSearchProjects() {
|
||||
const res = await useBaseFetch(
|
||||
`search?limit=3&query=${searchQuery.value}&index=${sortType.value}`,
|
||||
)
|
||||
searchProjects.value = await getSearchProjects()
|
||||
}
|
||||
|
||||
searchProjects.value = res?.hits ?? []
|
||||
async function getSearchProjects() {
|
||||
try {
|
||||
const res = await labrinth.projects_v2.search({
|
||||
limit: 3,
|
||||
query: searchQuery.value,
|
||||
index: sortType.value,
|
||||
})
|
||||
|
||||
return res?.hits ?? []
|
||||
} catch {
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
if (searchProjects.value.length === 0) {
|
||||
searchProjects.value = await getSearchProjects()
|
||||
}
|
||||
|
||||
const messages = defineMessages({
|
||||
|
||||
@@ -185,7 +185,7 @@ function mapExternalProject(
|
||||
exceptions: project.exceptions,
|
||||
proof: project.proof,
|
||||
flame_project_id: project.flame_project_id,
|
||||
files: project.linked_files,
|
||||
files: project.linked_files ?? [],
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -149,27 +149,34 @@
|
||||
<div class="card flex-card">
|
||||
<h2>Members</h2>
|
||||
<div class="details-list">
|
||||
<template v-for="member in acceptedMembers" :key="member?.user.id">
|
||||
<nuxt-link
|
||||
class="details-list__item details-list__item--type-large"
|
||||
:to="`/user/${member?.user?.username}`"
|
||||
>
|
||||
<Avatar :src="member?.user.avatar_url" circle />
|
||||
<div class="rows">
|
||||
<span class="flex items-center gap-1">
|
||||
{{ member?.user?.username }}
|
||||
<CrownIcon
|
||||
v-if="member?.is_owner"
|
||||
v-tooltip="'Organization owner'"
|
||||
class="text-brand-orange"
|
||||
/>
|
||||
</span>
|
||||
<span class="details-list__item__text--style-secondary">
|
||||
{{ member?.role ? member.role : 'Member' }}
|
||||
</span>
|
||||
</div>
|
||||
</nuxt-link>
|
||||
</template>
|
||||
<nuxt-link
|
||||
v-for="member in acceptedMembers"
|
||||
:key="`member-${member?.user?.id}`"
|
||||
class="group flex w-fit items-center gap-2 leading-[1.2] text-primary"
|
||||
:to="`/user/${member?.user?.username}`"
|
||||
>
|
||||
<Avatar
|
||||
:src="member.user.avatar_url"
|
||||
:alt="member.user.username"
|
||||
size="32px"
|
||||
circle
|
||||
/>
|
||||
<div class="flex flex-col">
|
||||
<span class="flex w-full flex-nowrap items-center gap-1 group-hover:underline">
|
||||
<span class="min-w-0 overflow-hidden truncate font-normal text-contrast">{{
|
||||
member.user.username
|
||||
}}</span>
|
||||
<CrownIcon
|
||||
v-if="member.is_owner"
|
||||
v-tooltip="'Organization owner'"
|
||||
class="text-brand-orange"
|
||||
/>
|
||||
</span>
|
||||
<span class="text-sm font-normal">
|
||||
{{ member?.role ? member.role : 'Member' }}
|
||||
</span>
|
||||
</div>
|
||||
</nuxt-link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -211,7 +218,7 @@
|
||||
: (projects ?? [])
|
||||
)
|
||||
.slice()
|
||||
.sort((a, b) => b.downloads - a.downloads)"
|
||||
.sort(projectUserSorting)"
|
||||
:key="project.id"
|
||||
>
|
||||
<ProjectCard
|
||||
@@ -327,6 +334,7 @@ import {
|
||||
provideOrganizationContext,
|
||||
} from '~/providers/organization-context.ts'
|
||||
import { isPermission } from '~/utils/permissions.ts'
|
||||
import { projectUserSorting } from '~/utils/projects.ts'
|
||||
|
||||
type ProjectV3 = Labrinth.Projects.v3.Project & {
|
||||
client_side: 'required' | 'optional' | 'unsupported'
|
||||
|
||||
@@ -284,11 +284,11 @@ import {
|
||||
VersionIcon,
|
||||
XCircleIcon,
|
||||
} from '@modrinth/assets'
|
||||
import { defineMessage } from '@modrinth/ui'
|
||||
import {
|
||||
AutoLink,
|
||||
Avatar,
|
||||
ButtonStyled,
|
||||
defineMessage,
|
||||
defineMessages,
|
||||
formatReportItemType,
|
||||
injectNotificationManager,
|
||||
|
||||
@@ -468,7 +468,6 @@ async function removePat(id) {
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.scope-items :deep(.checkbox-outer) {
|
||||
white-space: nowrap !important;
|
||||
justify-content: flex-start !important;
|
||||
}
|
||||
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
<span class="flex items-center gap-2">
|
||||
{{ user.username }}
|
||||
<BadgeCheckIcon
|
||||
v-if="isModrinthUser"
|
||||
v-if="isOfficialAccount"
|
||||
v-tooltip="formatMessage(messages.officialAccount)"
|
||||
class="size-5 text-brand"
|
||||
fill="var(--color-brand-highlight)"
|
||||
@@ -346,7 +346,7 @@
|
||||
: projects
|
||||
)
|
||||
.slice()
|
||||
.sort((a, b) => b.downloads - a.downloads)"
|
||||
.sort(projectUserSorting)"
|
||||
:key="project.id"
|
||||
:link="`/${project.project_type ?? 'project'}/${project.slug ? project.slug : project.id}`"
|
||||
:title="project.title"
|
||||
@@ -562,6 +562,7 @@ import AdPlaceholder from '~/components/ui/AdPlaceholder.vue'
|
||||
import CollectionCreateModal from '~/components/ui/create/CollectionCreateModal.vue'
|
||||
import ModalCreation from '~/components/ui/create/ProjectCreateModal.vue'
|
||||
import { getSignInRouteObj } from '~/composables/auth.js'
|
||||
import { projectUserSorting } from '~/utils/projects.ts'
|
||||
import { reportUser } from '~/utils/report-helpers.ts'
|
||||
import { hasActiveMidas, hasPride26Badge } from '~/utils/user-membership.ts'
|
||||
|
||||
@@ -809,6 +810,10 @@ const sortedOrgs = computed(() =>
|
||||
)
|
||||
|
||||
const isModrinthUser = computed(() => user.value?.id === '2REoufqX')
|
||||
const isAutoMod = computed(() => user.value?.id === '')
|
||||
const isOfficialAccount = computed(
|
||||
() => isModrinthUser.value || isAutoMod.value || user.value?.id === 'GVFjtWTf',
|
||||
)
|
||||
|
||||
const sortedCollections = computed(() => {
|
||||
const list = collections.value
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user