mirror of
https://github.com/modrinth/code.git
synced 2026-08-03 06:35:53 +00:00
Compare commits
105
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7b25d7e9c6 | ||
|
|
6816553c15 | ||
|
|
880e759336 | ||
|
|
84b386141c | ||
|
|
e9a4cc60ca | ||
|
|
d5869c514e | ||
|
|
de0a03b2e9 | ||
|
|
3f6c79b00d | ||
|
|
56c8bb1950 | ||
|
|
f81f951814 | ||
|
|
345ada27c0 | ||
|
|
e3395a7366 | ||
|
|
3552c8280b | ||
|
|
11f00be606 | ||
|
|
a207daef0d | ||
|
|
ddd395ed4f | ||
|
|
04a7ae55e7 | ||
|
|
5a33d462f6 | ||
|
|
cefa7b90ed | ||
|
|
0875a8a0bc | ||
|
|
5624e86c2b | ||
|
|
c622a9281f | ||
|
|
937d385241 | ||
|
|
3ec9bcf7e7 | ||
|
|
3dd5314062 | ||
|
|
d77823c5f4 | ||
|
|
41b48bd353 | ||
|
|
6225ece6be | ||
|
|
3f8805b953 | ||
|
|
6d68c0983f | ||
|
|
3ac0eb896c | ||
|
|
9c309e6da2 | ||
|
|
deaa57fa15 | ||
|
|
8053fec29f | ||
|
|
78aca7e5c0 | ||
|
|
728f8db7b9 | ||
|
|
4c14339b4b | ||
|
|
16ac2aae6b | ||
|
|
6d68d50699 | ||
|
|
400c571fe6 | ||
|
|
e57c15b3ce | ||
|
|
7cb7e881fa | ||
|
|
2cf82349a5 | ||
|
|
638bb55649 | ||
|
|
6d1b0eef15 | ||
|
|
03658b6a62 | ||
|
|
f998a8dca5 | ||
|
|
0d6bee3a5b | ||
|
|
7ce334aeb2 | ||
|
|
fe3a1b2058 | ||
|
|
662b73211a | ||
|
|
c453a03a02 | ||
|
|
05f8113bd0 | ||
|
|
63dfc3f636 | ||
|
|
c96a303d8a | ||
|
|
2d7e87a4cb | ||
|
|
fa421b4b83 | ||
|
|
79217e78b4 | ||
|
|
bdd808c279 | ||
|
|
986a7e6216 | ||
|
|
b54fcaa0b1 | ||
|
|
1cf782c298 | ||
|
|
fb1050e409 | ||
|
|
5c29a8c7dd | ||
|
|
09dead50d2 | ||
|
|
772e0ee220 | ||
|
|
86b0de3cee | ||
|
|
d174d96b74 | ||
|
|
1d193ed01b | ||
|
|
adf365d99d | ||
|
|
f3f48c3c6f | ||
|
|
e072f2237b | ||
|
|
306eee3a21 | ||
|
|
ca1d66d070 | ||
|
|
7e1400d111 | ||
|
|
7595e77170 | ||
|
|
08fcc61d35 | ||
|
|
b36801c5ed | ||
|
|
4ed1a1ae7f | ||
|
|
04db01cb55 | ||
|
|
8f5185de1c | ||
|
|
9f6db31785 | ||
|
|
a869086ce9 | ||
|
|
2af6a1b36f | ||
|
|
d4381f513f | ||
|
|
a281f13f15 | ||
|
|
a9641dadff | ||
|
|
c94dde9b47 | ||
|
|
976644d1e6 | ||
|
|
11fe90a69b | ||
|
|
1108086854 | ||
|
|
5aea892a39 | ||
|
|
3f3e6f5199 | ||
|
|
2efcd383bb | ||
|
|
faec9c2965 | ||
|
|
a0e8c7f924 | ||
|
|
6efdfdf17e | ||
|
|
aec268c6e9 | ||
|
|
2c096a85d6 | ||
|
|
240e5455cc | ||
|
|
c538a9ec6d | ||
|
|
72458f5c41 | ||
|
|
82e4eb7b40 | ||
|
|
c9bfc4e9b6 | ||
|
|
1ea96df00e |
@@ -1,6 +1,6 @@
|
||||
name: 👥 Bug with Modrinth Servers
|
||||
description: For issues with a Modrinth Servers product.
|
||||
labels: [servers]
|
||||
name: 👥 Bug with Modrinth Hosting
|
||||
description: For issues with a Modrinth Hosting product.
|
||||
labels: [hosting]
|
||||
type: 'bug'
|
||||
body:
|
||||
- type: checkboxes
|
||||
@@ -19,7 +19,7 @@ body:
|
||||
options:
|
||||
- Modrinth App
|
||||
- Modrinth.com website
|
||||
- Modrinth Servers
|
||||
- Modrinth Hosting
|
||||
- Modrinth API for developers
|
||||
- type: textarea
|
||||
attributes:
|
||||
|
||||
@@ -19,7 +19,7 @@ on:
|
||||
sign-windows-binaries:
|
||||
description: Sign Windows binaries
|
||||
type: boolean
|
||||
default: true
|
||||
default: false
|
||||
required: false
|
||||
|
||||
jobs:
|
||||
@@ -40,33 +40,48 @@ jobs:
|
||||
runs-on: ${{ matrix.platform }}
|
||||
|
||||
steps:
|
||||
- name: 📥 Check out code
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: 🧰 Setup Rust toolchain
|
||||
- name: Setup Rust toolchain
|
||||
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
with:
|
||||
rustflags: ''
|
||||
target: ${{ startsWith(matrix.platform, 'macos') && 'x86_64-apple-darwin' || '' }}
|
||||
|
||||
- name: 🧰 Install pnpm
|
||||
- name: Install pnpm
|
||||
uses: pnpm/action-setup@v4
|
||||
|
||||
- name: 🧰 Setup Node.js
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: .nvmrc
|
||||
cache: pnpm
|
||||
|
||||
- name: 🧰 Install Linux build dependencies
|
||||
- name: Generate tauri-dev.conf.json
|
||||
shell: bash
|
||||
run: |
|
||||
GIT_HASH=$(git rev-parse --short HEAD)
|
||||
cat > apps/app/tauri-dev.conf.json <<EOF
|
||||
{
|
||||
"productName": "Modrinth App (dev-${GIT_HASH})",
|
||||
"mainBinaryName": "Modrinth App (dev-${GIT_HASH})",
|
||||
"identifier": "ModrinthApp-dev-${GIT_HASH}",
|
||||
"bundle": {
|
||||
"fileAssociations": []
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
- name: Install Linux build dependencies
|
||||
if: startsWith(matrix.platform, 'ubuntu')
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -yq libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev
|
||||
|
||||
- name: 🧰 Setup Dasel
|
||||
- name: Setup Dasel
|
||||
uses: jaxxstorm/action-install-gh-release@v2.1.0
|
||||
with:
|
||||
repo: TomWright/dasel
|
||||
@@ -75,7 +90,7 @@ jobs:
|
||||
rename-to: ${{ startsWith(matrix.platform, 'windows') && 'dasel.exe' || 'dasel' }}
|
||||
chmod: 0755
|
||||
|
||||
- name: ⚙️ Set application version and environment
|
||||
- name: Set application version and environment
|
||||
shell: bash
|
||||
run: |
|
||||
APP_VERSION="$(git describe --tags --always | sed -E 's/-([0-9]+)-(g[0-9a-fA-F]+)$/-canary+\1.\2/')"
|
||||
@@ -86,13 +101,13 @@ jobs:
|
||||
|
||||
cp packages/app-lib/.env.prod packages/app-lib/.env
|
||||
|
||||
- name: 💨 Setup Turbo cache
|
||||
- name: Setup Turbo cache
|
||||
uses: rharkor/caching-for-turbo@v1.8
|
||||
|
||||
- name: 🧰 Install dependencies
|
||||
- name: Install dependencies
|
||||
run: pnpm install
|
||||
|
||||
- name: ✍️ Set up Windows code signing
|
||||
- name: Set up Windows code signing
|
||||
if: startsWith(matrix.platform, 'windows')
|
||||
shell: bash
|
||||
run: |
|
||||
@@ -102,8 +117,8 @@ jobs:
|
||||
dasel delete -f apps/app/tauri-release.conf.json 'bundle.windows.signCommand'
|
||||
fi
|
||||
|
||||
- name: 🔨 Build macOS app
|
||||
run: pnpm --filter=@modrinth/app run tauri build --target universal-apple-darwin --config tauri-release.conf.json
|
||||
- name: Build macOS app
|
||||
run: ${{ github.ref == 'refs/heads/main' && 'pnpm --filter=@modrinth/app run tauri build --target universal-apple-darwin --config tauri-release.conf.json' || 'pnpm --filter=@modrinth/app run tauri build --target universal-apple-darwin --config tauri-dev.conf.json' }}
|
||||
if: startsWith(matrix.platform, 'macos')
|
||||
env:
|
||||
ENABLE_CODE_SIGNING: ${{ secrets.APPLE_CERTIFICATE }}
|
||||
@@ -116,19 +131,19 @@ jobs:
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
|
||||
|
||||
- name: 🔨 Build Linux app
|
||||
run: pnpm --filter=@modrinth/app run tauri build --config tauri-release.conf.json
|
||||
- name: Build Linux app
|
||||
run: ${{ github.ref == 'refs/heads/main' && 'pnpm --filter=@modrinth/app run tauri build --config tauri-release.conf.json' || 'pnpm --filter=@modrinth/app run tauri build --config tauri-dev.conf.json' }}
|
||||
if: startsWith(matrix.platform, 'ubuntu')
|
||||
env:
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
|
||||
|
||||
- name: 🔨 Build Windows app
|
||||
- name: Build Windows app
|
||||
run: |
|
||||
[System.Convert]::FromBase64String("$env:DIGICERT_ONE_SIGNER_CLIENT_CERTIFICATE_BASE64") | Set-Content -Path signer-client-cert.p12 -AsByteStream
|
||||
$env:DIGICERT_ONE_SIGNER_CREDENTIALS = "$env:DIGICERT_ONE_SIGNER_API_KEY|$PWD\signer-client-cert.p12|$env:DIGICERT_ONE_SIGNER_CLIENT_CERTIFICATE_PASSWORD"
|
||||
$env:JAVA_HOME = "$env:JAVA_HOME_17_X64"
|
||||
pnpm --filter=@modrinth/app run tauri build --config tauri-release.conf.json --verbose --bundles 'nsis,updater'
|
||||
${{ github.ref == 'refs/heads/main' && 'pnpm --filter=@modrinth/app run tauri build --config tauri-release.conf.json --verbose --bundles "nsis,updater"' || 'pnpm --filter=@modrinth/app run tauri build --config tauri-dev.conf.json --verbose --bundles "nsis,updater"' }}
|
||||
Remove-Item -Path signer-client-cert.p12 -ErrorAction SilentlyContinue
|
||||
if: startsWith(matrix.platform, 'windows')
|
||||
env:
|
||||
@@ -138,7 +153,7 @@ jobs:
|
||||
DIGICERT_ONE_SIGNER_CLIENT_CERTIFICATE_BASE64: ${{ secrets.DIGICERT_ONE_SIGNER_CLIENT_CERTIFICATE_BASE64 }}
|
||||
DIGICERT_ONE_SIGNER_CLIENT_CERTIFICATE_PASSWORD: ${{ secrets.DIGICERT_ONE_SIGNER_CLIENT_CERTIFICATE_PASSWORD }}
|
||||
|
||||
- name: 📤 Upload app bundles
|
||||
- name: Upload app bundles
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: App bundle (${{ matrix.artifact-target-name }})
|
||||
@@ -146,7 +161,13 @@ jobs:
|
||||
target/release/bundle/appimage/Modrinth App_*.AppImage*
|
||||
target/release/bundle/deb/Modrinth App_*.deb*
|
||||
target/release/bundle/rpm/Modrinth App-*.rpm*
|
||||
target/release/bundle/appimage/Modrinth App (dev-*)_*.AppImage*
|
||||
target/release/bundle/deb/Modrinth App (dev-*)_*.deb*
|
||||
target/release/bundle/rpm/Modrinth App (dev-*)-*.rpm*
|
||||
target/universal-apple-darwin/release/bundle/macos/Modrinth App.app.tar.gz*
|
||||
target/universal-apple-darwin/release/bundle/macos/Modrinth App (dev-*)*.app.tar.gz
|
||||
target/universal-apple-darwin/release/bundle/dmg/Modrinth App (dev-*)*.dmg
|
||||
target/universal-apple-darwin/release/bundle/dmg/Modrinth App_*.dmg*
|
||||
target/release/bundle/nsis/Modrinth App_*-setup.exe*
|
||||
target/release/bundle/nsis/Modrinth App (dev-*)_*-setup.exe*
|
||||
target/release/bundle/nsis/Modrinth App_*-setup.nsis.zip*
|
||||
|
||||
@@ -65,6 +65,7 @@ app-playground-data/*
|
||||
|
||||
.astro
|
||||
.claude
|
||||
.letta
|
||||
|
||||
# labrinth demo fixtures
|
||||
apps/labrinth/fixtures/demo
|
||||
|
||||
Generated
+600
-26
@@ -521,6 +521,22 @@ dependencies = [
|
||||
"zbus",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "astral-tokio-tar"
|
||||
version = "0.5.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec179a06c1769b1e42e1e2cbe74c7dcdb3d6383c838454d063eaac5bbb7ebbe5"
|
||||
dependencies = [
|
||||
"filetime",
|
||||
"futures-core",
|
||||
"libc",
|
||||
"portable-atomic",
|
||||
"rustc-hash",
|
||||
"tokio",
|
||||
"tokio-stream",
|
||||
"xattr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-broadcast"
|
||||
version = "0.7.2"
|
||||
@@ -671,6 +687,28 @@ dependencies = [
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-stream"
|
||||
version = "0.3.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476"
|
||||
dependencies = [
|
||||
"async-stream-impl",
|
||||
"futures-core",
|
||||
"pin-project-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-stream-impl"
|
||||
version = "0.3.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.106",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-stripe"
|
||||
version = "0.41.0"
|
||||
@@ -892,6 +930,49 @@ dependencies = [
|
||||
"thiserror 2.0.17",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "axum"
|
||||
version = "0.8.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b52af3cb4058c895d37317bb27508dccc8e5f2d39454016b297bf4a400597b8"
|
||||
dependencies = [
|
||||
"axum-core",
|
||||
"bytes",
|
||||
"futures-util",
|
||||
"http 1.3.1",
|
||||
"http-body 1.0.1",
|
||||
"http-body-util",
|
||||
"itoa",
|
||||
"matchit",
|
||||
"memchr",
|
||||
"mime",
|
||||
"percent-encoding",
|
||||
"pin-project-lite",
|
||||
"serde_core",
|
||||
"sync_wrapper",
|
||||
"tower",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "axum-core"
|
||||
version = "0.5.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"futures-core",
|
||||
"http 1.3.1",
|
||||
"http-body 1.0.1",
|
||||
"http-body-util",
|
||||
"mime",
|
||||
"pin-project-lite",
|
||||
"sync_wrapper",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "backtrace"
|
||||
version = "0.3.76"
|
||||
@@ -1066,6 +1147,83 @@ dependencies = [
|
||||
"piper",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bollard"
|
||||
version = "0.19.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "87a52479c9237eb04047ddb94788c41ca0d26eaff8b697ecfbb4c32f7fdc3b1b"
|
||||
dependencies = [
|
||||
"async-stream",
|
||||
"base64 0.22.1",
|
||||
"bitflags 2.9.4",
|
||||
"bollard-buildkit-proto",
|
||||
"bollard-stubs",
|
||||
"bytes",
|
||||
"chrono",
|
||||
"futures-core",
|
||||
"futures-util",
|
||||
"hex",
|
||||
"home",
|
||||
"http 1.3.1",
|
||||
"http-body-util",
|
||||
"hyper 1.7.0",
|
||||
"hyper-named-pipe",
|
||||
"hyper-rustls 0.27.7",
|
||||
"hyper-util",
|
||||
"hyperlocal",
|
||||
"log",
|
||||
"num",
|
||||
"pin-project-lite",
|
||||
"rand 0.9.2",
|
||||
"rustls 0.23.32",
|
||||
"rustls-native-certs 0.8.1",
|
||||
"rustls-pemfile 2.2.0",
|
||||
"rustls-pki-types",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"serde_json",
|
||||
"serde_repr",
|
||||
"serde_urlencoded",
|
||||
"thiserror 2.0.17",
|
||||
"tokio",
|
||||
"tokio-stream",
|
||||
"tokio-util",
|
||||
"tonic 0.14.2",
|
||||
"tower-service",
|
||||
"url",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bollard-buildkit-proto"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "85a885520bf6249ab931a764ffdb87b0ceef48e6e7d807cfdb21b751e086e1ad"
|
||||
dependencies = [
|
||||
"prost 0.14.3",
|
||||
"prost-types",
|
||||
"tonic 0.14.2",
|
||||
"tonic-prost",
|
||||
"ureq",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bollard-stubs"
|
||||
version = "1.49.1-rc.28.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5731fe885755e92beff1950774068e0cae67ea6ec7587381536fca84f1779623"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"bollard-buildkit-proto",
|
||||
"bytes",
|
||||
"chrono",
|
||||
"prost 0.14.3",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serde_repr",
|
||||
"serde_with",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "borsh"
|
||||
version = "1.5.7"
|
||||
@@ -2089,30 +2247,28 @@ checksum = "be1e0bca6c3637f992fc1cc7cbc52a78c1ef6db076dbf1059c4323d6a2048376"
|
||||
[[package]]
|
||||
name = "deadpool"
|
||||
version = "0.12.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0be2b1d1d6ec8d846f05e137292d0b89133caf95ef33695424c09568bdd39b1b"
|
||||
source = "git+https://github.com/modrinth/deadpool?rev=db5fb00b036ecc8fe5f18853c559b745ffe47bde#db5fb00b036ecc8fe5f18853c559b745ffe47bde"
|
||||
dependencies = [
|
||||
"deadpool-runtime",
|
||||
"lazy_static",
|
||||
"num_cpus",
|
||||
"tokio",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "deadpool-redis"
|
||||
version = "0.22.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c0965b977f1244bc3783bb27cd79cfcff335a8341da18f79232d00504b18eb1a"
|
||||
version = "0.22.1"
|
||||
source = "git+https://github.com/modrinth/deadpool?rev=db5fb00b036ecc8fe5f18853c559b745ffe47bde#db5fb00b036ecc8fe5f18853c559b745ffe47bde"
|
||||
dependencies = [
|
||||
"deadpool",
|
||||
"redis",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "deadpool-runtime"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b"
|
||||
version = "0.1.5"
|
||||
source = "git+https://github.com/modrinth/deadpool?rev=db5fb00b036ecc8fe5f18853c559b745ffe47bde#db5fb00b036ecc8fe5f18853c559b745ffe47bde"
|
||||
dependencies = [
|
||||
"tokio",
|
||||
]
|
||||
@@ -2378,6 +2534,17 @@ dependencies = [
|
||||
"const-random",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "docker_credential"
|
||||
version = "1.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1d89dfcba45b4afad7450a99b39e751590463e45c04728cf555d36bb66940de8"
|
||||
dependencies = [
|
||||
"base64 0.21.7",
|
||||
"serde",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "document-features"
|
||||
version = "0.2.11"
|
||||
@@ -2679,6 +2846,17 @@ dependencies = [
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "etcetera"
|
||||
version = "0.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "26c7b13d0780cb82722fd59f6f57f925e143427e4a75313a6c77243bf5326ae6"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"home",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "event-listener"
|
||||
version = "2.5.3"
|
||||
@@ -3801,6 +3979,21 @@ dependencies = [
|
||||
"want",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hyper-named-pipe"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "73b7d8abf35697b81a825e386fc151e0d503e8cb5fcb93cc8669c376dfd6f278"
|
||||
dependencies = [
|
||||
"hex",
|
||||
"hyper 1.7.0",
|
||||
"hyper-util",
|
||||
"pin-project-lite",
|
||||
"tokio",
|
||||
"tower-service",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hyper-rustls"
|
||||
version = "0.24.2"
|
||||
@@ -3835,6 +4028,19 @@ dependencies = [
|
||||
"webpki-roots 1.0.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hyper-timeout"
|
||||
version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0"
|
||||
dependencies = [
|
||||
"hyper 1.7.0",
|
||||
"hyper-util",
|
||||
"pin-project-lite",
|
||||
"tokio",
|
||||
"tower-service",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hyper-tls"
|
||||
version = "0.6.0"
|
||||
@@ -3877,6 +4083,21 @@ dependencies = [
|
||||
"windows-registry",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hyperlocal"
|
||||
version = "0.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "986c5ce3b994526b3cd75578e62554abd09f0899d6206de48b3e96ab34ccc8c7"
|
||||
dependencies = [
|
||||
"hex",
|
||||
"http-body-util",
|
||||
"hyper 1.7.0",
|
||||
"hyper-util",
|
||||
"pin-project-lite",
|
||||
"tokio",
|
||||
"tower-service",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "iana-time-zone"
|
||||
version = "0.1.64"
|
||||
@@ -4523,6 +4744,7 @@ dependencies = [
|
||||
"const_format",
|
||||
"dashmap",
|
||||
"deadpool-redis",
|
||||
"derive_more 2.0.1",
|
||||
"dotenv-build",
|
||||
"dotenvy",
|
||||
"either",
|
||||
@@ -4558,7 +4780,6 @@ dependencies = [
|
||||
"rustls 0.23.32",
|
||||
"rusty-money",
|
||||
"sentry",
|
||||
"sentry-actix",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serde_with",
|
||||
@@ -4566,6 +4787,7 @@ dependencies = [
|
||||
"sha2",
|
||||
"spdx",
|
||||
"sqlx",
|
||||
"sqlx-tracing",
|
||||
"strum",
|
||||
"thiserror 2.0.17",
|
||||
"tikv-jemalloc-ctl",
|
||||
@@ -4888,6 +5110,12 @@ version = "0.1.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
|
||||
|
||||
[[package]]
|
||||
name = "matchit"
|
||||
version = "0.8.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3"
|
||||
|
||||
[[package]]
|
||||
name = "maxminddb"
|
||||
version = "0.26.0"
|
||||
@@ -5061,6 +5289,7 @@ version = "0.0.0"
|
||||
dependencies = [
|
||||
"dotenvy",
|
||||
"eyre",
|
||||
"sentry",
|
||||
"tracing",
|
||||
"tracing-ecs",
|
||||
"tracing-subscriber",
|
||||
@@ -5872,6 +6101,124 @@ dependencies = [
|
||||
"vcpkg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "opentelemetry"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "aaf416e4cb72756655126f7dd7bb0af49c674f4c1b9903e80c009e0c37e552e6"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-sink",
|
||||
"js-sys",
|
||||
"pin-project-lite",
|
||||
"thiserror 2.0.17",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "opentelemetry-appender-tracing"
|
||||
version = "0.30.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e68f63eca5fad47e570e00e893094fc17be959c80c79a7d6ec1abdd5ae6ffc16"
|
||||
dependencies = [
|
||||
"opentelemetry",
|
||||
"tracing",
|
||||
"tracing-core",
|
||||
"tracing-log",
|
||||
"tracing-opentelemetry",
|
||||
"tracing-subscriber",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "opentelemetry-http"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "50f6639e842a97dbea8886e3439710ae463120091e2e064518ba8e716e6ac36d"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"bytes",
|
||||
"http 1.3.1",
|
||||
"opentelemetry",
|
||||
"reqwest",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "opentelemetry-otlp"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dbee664a43e07615731afc539ca60c6d9f1a9425e25ca09c57bc36c87c55852b"
|
||||
dependencies = [
|
||||
"http 1.3.1",
|
||||
"opentelemetry",
|
||||
"opentelemetry-http",
|
||||
"opentelemetry-proto",
|
||||
"opentelemetry_sdk",
|
||||
"prost 0.13.5",
|
||||
"reqwest",
|
||||
"thiserror 2.0.17",
|
||||
"tokio",
|
||||
"tonic 0.13.1",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "opentelemetry-proto"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2e046fd7660710fe5a05e8748e70d9058dc15c94ba914e7c4faa7c728f0e8ddc"
|
||||
dependencies = [
|
||||
"opentelemetry",
|
||||
"opentelemetry_sdk",
|
||||
"prost 0.13.5",
|
||||
"tonic 0.13.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "opentelemetry-semantic-conventions"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "83d059a296a47436748557a353c5e6c5705b9470ef6c95cfc52c21a8814ddac2"
|
||||
|
||||
[[package]]
|
||||
name = "opentelemetry-testing"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "562407eb254fea88076c8a410a733a8ee2075fd9c7fbde3da2a03d29e2cef104"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"opentelemetry",
|
||||
"opentelemetry-appender-tracing",
|
||||
"opentelemetry-otlp",
|
||||
"opentelemetry-semantic-conventions",
|
||||
"opentelemetry_sdk",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serial_test",
|
||||
"tempfile",
|
||||
"testcontainers",
|
||||
"tokio",
|
||||
"tracing-opentelemetry",
|
||||
"tracing-subscriber",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "opentelemetry_sdk"
|
||||
version = "0.30.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "11f644aa9e5e31d11896e024305d7e3c98a88884d9f8919dbf37a9991bc47a4b"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-executor",
|
||||
"futures-util",
|
||||
"opentelemetry",
|
||||
"percent-encoding",
|
||||
"rand 0.9.2",
|
||||
"serde_json",
|
||||
"thiserror 2.0.17",
|
||||
"tokio",
|
||||
"tokio-stream",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "option-ext"
|
||||
version = "0.2.0"
|
||||
@@ -5996,6 +6343,31 @@ dependencies = [
|
||||
"windows-link 0.2.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parse-display"
|
||||
version = "0.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "914a1c2265c98e2446911282c6ac86d8524f495792c38c5bd884f80499c7538a"
|
||||
dependencies = [
|
||||
"parse-display-derive",
|
||||
"regex",
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parse-display-derive"
|
||||
version = "0.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2ae7800a4c974efd12df917266338e79a7a74415173caf7e70aa0a0707345281"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"regex",
|
||||
"regex-syntax",
|
||||
"structmeta",
|
||||
"syn 2.0.106",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "parse-size"
|
||||
version = "1.1.0"
|
||||
@@ -6383,7 +6755,7 @@ dependencies = [
|
||||
"inferno",
|
||||
"num",
|
||||
"paste",
|
||||
"prost",
|
||||
"prost 0.13.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -6589,7 +6961,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"prost-derive",
|
||||
"prost-derive 0.13.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "prost"
|
||||
version = "0.14.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"prost-derive 0.14.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -6605,6 +6987,28 @@ dependencies = [
|
||||
"syn 2.0.106",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "prost-derive"
|
||||
version = "0.14.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"itertools 0.14.0",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.106",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "prost-types"
|
||||
version = "0.14.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7"
|
||||
dependencies = [
|
||||
"prost 0.14.3",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "protobuf"
|
||||
version = "3.7.2"
|
||||
@@ -7632,6 +8036,15 @@ dependencies = [
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "scc"
|
||||
version = "2.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "46e6f046b7fef48e2660c57ed794263155d713de679057f2d0c169bfc6e756cc"
|
||||
dependencies = [
|
||||
"sdd",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "schannel"
|
||||
version = "0.1.28"
|
||||
@@ -7723,6 +8136,12 @@ dependencies = [
|
||||
"untrusted",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sdd"
|
||||
version = "3.0.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "490dcfcbfef26be6800d11870ff2df8774fa6e86d047e3e8c8a76b25655e41ca"
|
||||
|
||||
[[package]]
|
||||
name = "seahash"
|
||||
version = "4.1.0"
|
||||
@@ -7846,19 +8265,6 @@ dependencies = [
|
||||
"ureq",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sentry-actix"
|
||||
version = "0.45.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cc694e6ffc8d5d7fdb2a33923b0358f6ad41c0b428ced034b349b9e2b08260bc"
|
||||
dependencies = [
|
||||
"actix-http",
|
||||
"actix-web",
|
||||
"bytes",
|
||||
"futures-util",
|
||||
"sentry-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sentry-backtrace"
|
||||
version = "0.45.0"
|
||||
@@ -8182,6 +8588,32 @@ dependencies = [
|
||||
"syn 2.0.106",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serial_test"
|
||||
version = "3.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0d0b343e184fc3b7bb44dff0705fffcf4b3756ba6aff420dddd8b24ca145e555"
|
||||
dependencies = [
|
||||
"futures-executor",
|
||||
"futures-util",
|
||||
"log",
|
||||
"once_cell",
|
||||
"parking_lot",
|
||||
"scc",
|
||||
"serial_test_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serial_test_derive"
|
||||
version = "3.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6f50427f258fb77356e4cd4aa0e87e2bd2c66dbcee41dc405282cae2bfc26c83"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.106",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serialize-to-javascript"
|
||||
version = "0.1.2"
|
||||
@@ -8588,7 +9020,7 @@ dependencies = [
|
||||
"chrono",
|
||||
"crc",
|
||||
"dotenvy",
|
||||
"etcetera",
|
||||
"etcetera 0.8.0",
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
"futures-util",
|
||||
@@ -8641,6 +9073,20 @@ dependencies = [
|
||||
"uuid 1.18.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sqlx-tracing"
|
||||
version = "0.2.0"
|
||||
dependencies = [
|
||||
"derive_more 2.0.1",
|
||||
"futures",
|
||||
"opentelemetry",
|
||||
"opentelemetry-testing",
|
||||
"sqlx",
|
||||
"testcontainers",
|
||||
"tokio",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "stable_deref_trait"
|
||||
version = "1.2.1"
|
||||
@@ -9417,6 +9863,35 @@ dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "testcontainers"
|
||||
version = "0.25.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f3ac71069f20ecfa60c396316c283fbf35e6833a53dff551a31b5458da05edc"
|
||||
dependencies = [
|
||||
"astral-tokio-tar",
|
||||
"async-trait",
|
||||
"bollard",
|
||||
"bytes",
|
||||
"docker_credential",
|
||||
"either",
|
||||
"etcetera 0.10.0",
|
||||
"futures",
|
||||
"log",
|
||||
"memchr",
|
||||
"parse-display",
|
||||
"pin-project-lite",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serde_with",
|
||||
"thiserror 2.0.17",
|
||||
"tokio",
|
||||
"tokio-stream",
|
||||
"tokio-util",
|
||||
"ulid",
|
||||
"url",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "theseus"
|
||||
version = "1.0.0-local"
|
||||
@@ -9454,6 +9929,7 @@ dependencies = [
|
||||
"notify",
|
||||
"notify-debouncer-mini",
|
||||
"p256",
|
||||
"parking_lot",
|
||||
"paste",
|
||||
"path-util",
|
||||
"phf 0.13.1",
|
||||
@@ -9882,6 +10358,72 @@ version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "df8b2b54733674ad286d16267dcfc7a71ed5c776e4ac7aa3c3e2561f7c637bf2"
|
||||
|
||||
[[package]]
|
||||
name = "tonic"
|
||||
version = "0.13.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7e581ba15a835f4d9ea06c55ab1bd4dce26fc53752c69a04aac00703bfb49ba9"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"base64 0.22.1",
|
||||
"bytes",
|
||||
"http 1.3.1",
|
||||
"http-body 1.0.1",
|
||||
"http-body-util",
|
||||
"hyper 1.7.0",
|
||||
"hyper-timeout",
|
||||
"hyper-util",
|
||||
"percent-encoding",
|
||||
"pin-project",
|
||||
"prost 0.13.5",
|
||||
"tokio",
|
||||
"tokio-stream",
|
||||
"tower",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tonic"
|
||||
version = "0.14.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eb7613188ce9f7df5bfe185db26c5814347d110db17920415cf2fbcad85e7203"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"axum",
|
||||
"base64 0.22.1",
|
||||
"bytes",
|
||||
"h2 0.4.12",
|
||||
"http 1.3.1",
|
||||
"http-body 1.0.1",
|
||||
"http-body-util",
|
||||
"hyper 1.7.0",
|
||||
"hyper-timeout",
|
||||
"hyper-util",
|
||||
"percent-encoding",
|
||||
"pin-project",
|
||||
"socket2 0.6.1",
|
||||
"sync_wrapper",
|
||||
"tokio",
|
||||
"tokio-stream",
|
||||
"tower",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tonic-prost"
|
||||
version = "0.14.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "66bd50ad6ce1252d87ef024b3d64fe4c3cf54a86fb9ef4c631fdd0ded7aeaa67"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"prost 0.14.3",
|
||||
"tonic 0.14.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "totp-rs"
|
||||
version = "5.7.0"
|
||||
@@ -9904,11 +10446,15 @@ checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-util",
|
||||
"indexmap 2.11.4",
|
||||
"pin-project-lite",
|
||||
"slab",
|
||||
"sync_wrapper",
|
||||
"tokio",
|
||||
"tokio-util",
|
||||
"tower-layer",
|
||||
"tower-service",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -10024,6 +10570,24 @@ dependencies = [
|
||||
"tracing-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-opentelemetry"
|
||||
version = "0.31.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ddcf5959f39507d0d04d6413119c04f33b623f4f951ebcbdddddfad2d0623a9c"
|
||||
dependencies = [
|
||||
"js-sys",
|
||||
"once_cell",
|
||||
"opentelemetry",
|
||||
"opentelemetry_sdk",
|
||||
"smallvec",
|
||||
"tracing",
|
||||
"tracing-core",
|
||||
"tracing-log",
|
||||
"tracing-subscriber",
|
||||
"web-time",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tracing-subscriber"
|
||||
version = "0.3.20"
|
||||
@@ -10119,6 +10683,16 @@ dependencies = [
|
||||
"winapi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ulid"
|
||||
version = "1.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "470dbf6591da1b39d43c14523b2b469c86879a53e8b758c8e090a470fe7b1fbe"
|
||||
dependencies = [
|
||||
"rand 0.9.2",
|
||||
"web-time",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uname"
|
||||
version = "0.1.1"
|
||||
|
||||
+5
-3
@@ -60,7 +60,7 @@ const_format = "0.2.34"
|
||||
daedalus = { path = "packages/daedalus" }
|
||||
dashmap = "6.1.0"
|
||||
data-url = "0.3.2"
|
||||
deadpool-redis = "0.22.0"
|
||||
deadpool-redis = { version = "0.22.1", git = "https://github.com/modrinth/deadpool", rev = "db5fb00b036ecc8fe5f18853c559b745ffe47bde" }
|
||||
derive_more = "2.0.1"
|
||||
directories = "6.0.0"
|
||||
dirs = "6.0.0"
|
||||
@@ -116,6 +116,7 @@ native-dialog = "0.9.2"
|
||||
notify = { version = "8.2.0", default-features = false }
|
||||
notify-debouncer-mini = { version = "0.7.0", default-features = false }
|
||||
p256 = "0.13.2"
|
||||
parking_lot = "0.12.5"
|
||||
paste = "1.0.15"
|
||||
path-util = { path = "packages/path-util" }
|
||||
phf = { version = "0.13.1", features = ["macros"] }
|
||||
@@ -150,7 +151,6 @@ sentry = { version = "0.45.0", default-features = false, features = [
|
||||
"reqwest",
|
||||
"rustls",
|
||||
] }
|
||||
sentry-actix = "0.45.0"
|
||||
serde = "1.0.228"
|
||||
serde_bytes = "0.11.19"
|
||||
serde_cbor = "0.11.2"
|
||||
@@ -164,6 +164,7 @@ sha2 = "0.10.9"
|
||||
shlex = "1.3.0"
|
||||
spdx = "0.12.0"
|
||||
sqlx = { version = "0.8.6", default-features = false }
|
||||
sqlx-tracing = { path = "packages/sqlx-tracing" }
|
||||
strum = "0.27.2"
|
||||
sysinfo = { version = "0.37.2", default-features = false }
|
||||
tar = "0.4.44"
|
||||
@@ -239,7 +240,7 @@ manual_assert = "warn"
|
||||
manual_instant_elapsed = "warn"
|
||||
manual_is_variant_and = "warn"
|
||||
manual_let_else = "warn"
|
||||
map_unwrap_or = "warn"
|
||||
map_unwrap_or = "allow"
|
||||
match_bool = "warn"
|
||||
needless_collect = "warn"
|
||||
negative_feature_names = "warn"
|
||||
@@ -269,4 +270,5 @@ codegen-units = 1 # Compile crates one after another so the compiler can optimi
|
||||
# Specific profile for labrinth production builds
|
||||
[profile.release-labrinth]
|
||||
inherits = "release"
|
||||
strip = false # Keep debug symbols for Sentry
|
||||
panic = "unwind" # Don't exit the whole app on panic in production
|
||||
|
||||
@@ -17,3 +17,7 @@ extend-exclude = [
|
||||
tou = "tou"
|
||||
# Google Ad Manager
|
||||
gam = "gam"
|
||||
# short for "constants"
|
||||
consts = "consts"
|
||||
# short for "Copy"
|
||||
Cpy = "Cpy"
|
||||
|
||||
@@ -71,6 +71,7 @@ import PromotionWrapper from '@/components/ui/PromotionWrapper.vue'
|
||||
import QuickInstanceSwitcher from '@/components/ui/QuickInstanceSwitcher.vue'
|
||||
import RunningAppBar from '@/components/ui/RunningAppBar.vue'
|
||||
import SplashScreen from '@/components/ui/SplashScreen.vue'
|
||||
import UpdateAvailableToast from '@/components/ui/UpdateAvailableToast.vue'
|
||||
import UpdateToast from '@/components/ui/UpdateToast.vue'
|
||||
import URLConfirmModal from '@/components/ui/URLConfirmModal.vue'
|
||||
import { useCheckDisableMouseover } from '@/composables/macCssFix.js'
|
||||
@@ -143,6 +144,7 @@ const showOnboarding = ref(false)
|
||||
const nativeDecorations = ref(false)
|
||||
|
||||
const os = ref('')
|
||||
const isDevEnvironment = ref(false)
|
||||
|
||||
const stateInitialized = ref(false)
|
||||
|
||||
@@ -247,6 +249,7 @@ async function setupApp() {
|
||||
|
||||
os.value = await getOS()
|
||||
const dev = await isDev()
|
||||
isDevEnvironment.value = dev
|
||||
const version = await getVersion()
|
||||
showOnboarding.value = !onboarded
|
||||
|
||||
@@ -505,21 +508,23 @@ const restarting = ref(false)
|
||||
const updateToastDismissed = ref(false)
|
||||
const availableUpdate = ref(null)
|
||||
const updateSize = ref(null)
|
||||
const updatesEnabled = ref(true)
|
||||
async function checkUpdates() {
|
||||
if (!(await areUpdatesEnabled())) {
|
||||
console.log('Skipping update check as updates are disabled in this build or environment')
|
||||
updatesEnabled.value = false
|
||||
return
|
||||
}
|
||||
|
||||
async function performCheck() {
|
||||
const update = await invoke('plugin:updater|check')
|
||||
const isExistingUpdate = update.version === availableUpdate.value?.version
|
||||
|
||||
if (!update) {
|
||||
console.log('No update available')
|
||||
return
|
||||
}
|
||||
|
||||
const isExistingUpdate = update.version === availableUpdate.value?.version
|
||||
|
||||
if (isExistingUpdate) {
|
||||
console.log('Update is already known')
|
||||
return
|
||||
@@ -769,6 +774,7 @@ provideAppUpdateDownloadProgress(appUpdateDownload)
|
||||
@restart="installUpdate"
|
||||
@download="downloadAvailableUpdate"
|
||||
/>
|
||||
<UpdateAvailableToast v-else-if="!updatesEnabled && os === 'Linux' && !isDevEnvironment" />
|
||||
</Transition>
|
||||
</Suspense>
|
||||
<Transition name="fade">
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
<script setup lang="ts">
|
||||
import { GameIcon, LeftArrowIcon } from '@modrinth/assets'
|
||||
import { Avatar, ButtonStyled } from '@modrinth/ui'
|
||||
import { formatCategory } from '@modrinth/utils'
|
||||
import { Avatar, ButtonStyled, FormattedTag } from '@modrinth/ui'
|
||||
import { convertFileSrc } from '@tauri-apps/api/core'
|
||||
|
||||
type Instance = {
|
||||
@@ -37,7 +36,8 @@ defineProps<{
|
||||
</span>
|
||||
<span class="text-secondary flex items-center gap-2 font-semibold">
|
||||
<GameIcon class="h-5 w-5 text-secondary" />
|
||||
{{ formatCategory(instance.loader) }} {{ instance.game_version }}
|
||||
<FormattedTag :tag="instance.loader" enforce-type="loader" />
|
||||
{{ instance.game_version }}
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script setup>
|
||||
import { DownloadIcon, HeartIcon, TagIcon } from '@modrinth/assets'
|
||||
import { Avatar, TagItem } from '@modrinth/ui'
|
||||
import { formatCategory, formatNumber } from '@modrinth/utils'
|
||||
import { Avatar, FormattedTag, TagItem } from '@modrinth/ui'
|
||||
import { formatNumber } from '@modrinth/utils'
|
||||
import dayjs from 'dayjs'
|
||||
import relativeTime from 'dayjs/plugin/relativeTime'
|
||||
import { computed } from 'vue'
|
||||
@@ -107,7 +107,7 @@ const toTransparent = computed(() => {
|
||||
<div class="flex items-center gap-1 pr-2">
|
||||
<TagIcon />
|
||||
<TagItem>
|
||||
{{ formatCategory(featuredCategory) }}
|
||||
<FormattedTag :tag="featuredCategory" />
|
||||
</TagItem>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
:key="tag"
|
||||
class="text-sm font-semibold text-secondary flex gap-1 px-[0.375rem] py-0.5 bg-button-bg rounded-full"
|
||||
>
|
||||
{{ formatCategory(tag.name) }}
|
||||
<FormattedTag :tag="tag.name" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -118,8 +118,8 @@
|
||||
|
||||
<script setup>
|
||||
import { CheckIcon, DownloadIcon, HeartIcon, PlusIcon, TagsIcon } from '@modrinth/assets'
|
||||
import { Avatar, ButtonStyled, injectNotificationManager } from '@modrinth/ui'
|
||||
import { formatCategory, formatNumber } from '@modrinth/utils'
|
||||
import { Avatar, ButtonStyled, FormattedTag, injectNotificationManager } from '@modrinth/ui'
|
||||
import { formatNumber } from '@modrinth/utils'
|
||||
import dayjs from 'dayjs'
|
||||
import relativeTime from 'dayjs/plugin/relativeTime'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
<script setup lang="ts">
|
||||
import { XIcon } from '@modrinth/assets'
|
||||
import { ButtonStyled, commonMessages, defineMessages, useVIntl } from '@modrinth/ui'
|
||||
import { getVersion } from '@tauri-apps/api/app'
|
||||
import { onMounted, onUnmounted, ref } from 'vue'
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const dismissed = ref(false)
|
||||
const availableUpdate = ref<{ version: string } | null>(null)
|
||||
|
||||
let checkInterval: ReturnType<typeof setInterval> | null = null
|
||||
|
||||
async function checkForUpdate() {
|
||||
try {
|
||||
const [response, currentVersion] = await Promise.all([
|
||||
fetch('https://launcher-files.modrinth.com/updates.json'),
|
||||
getVersion(),
|
||||
])
|
||||
const updates = await response.json()
|
||||
const latestVersion = updates?.version
|
||||
|
||||
if (latestVersion && latestVersion !== currentVersion) {
|
||||
if (latestVersion !== availableUpdate.value?.version) {
|
||||
availableUpdate.value = { version: latestVersion }
|
||||
dismissed.value = false
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Failed to check for updates:', e)
|
||||
}
|
||||
}
|
||||
|
||||
function dismiss() {
|
||||
dismissed.value = true
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
checkForUpdate()
|
||||
checkInterval = setInterval(checkForUpdate, 5 * 60 * 1000)
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
if (checkInterval) {
|
||||
clearInterval(checkInterval)
|
||||
}
|
||||
})
|
||||
|
||||
const messages = defineMessages({
|
||||
title: {
|
||||
id: 'app.update-toast.title',
|
||||
defaultMessage: 'Update available',
|
||||
},
|
||||
body: {
|
||||
id: 'app.update-toast.body.linux',
|
||||
defaultMessage:
|
||||
'Modrinth App v{version} is available. Use your package manager to update for the latest features and fixes!',
|
||||
},
|
||||
download: {
|
||||
id: 'app.update-toast.download-page',
|
||||
defaultMessage: 'Download',
|
||||
},
|
||||
})
|
||||
</script>
|
||||
<template>
|
||||
<div
|
||||
v-if="availableUpdate && !dismissed"
|
||||
class="grid grid-cols-[min-content] fixed card-shadow rounded-2xl top-[--top-bar-height] mt-6 right-6 p-4 z-10 bg-bg-raised border-divider border-solid border-[2px]"
|
||||
>
|
||||
<div class="flex min-w-[25rem] gap-4">
|
||||
<h2 class="whitespace-nowrap text-base text-contrast font-semibold m-0 grow">
|
||||
{{ formatMessage(messages.title) }}
|
||||
</h2>
|
||||
<ButtonStyled size="small" circular>
|
||||
<button v-tooltip="formatMessage(commonMessages.closeButton)" @click="dismiss">
|
||||
<XIcon />
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
<p class="text-sm mt-2 mb-0">
|
||||
{{ formatMessage(messages.body, { version: availableUpdate.version }) }}
|
||||
</p>
|
||||
</div>
|
||||
</template>
|
||||
@@ -28,7 +28,7 @@
|
||||
:custom-label="
|
||||
(version) =>
|
||||
`${version?.name} (${version?.loaders
|
||||
.map((name) => formatCategory(name))
|
||||
.map((name) => formatLoader(formatMessage, name))
|
||||
.join(', ')} - ${version?.game_versions.join(', ')})`
|
||||
"
|
||||
:max-height="150"
|
||||
@@ -36,7 +36,9 @@
|
||||
<span v-else>
|
||||
<span>
|
||||
{{ selectedVersion?.name }} ({{
|
||||
selectedVersion?.loaders.map((name) => formatCategory(name)).join(', ')
|
||||
selectedVersion?.loaders
|
||||
.map((name) => formatLoader(formatMessage, name))
|
||||
.join(', ')
|
||||
}}
|
||||
- {{ selectedVersion?.game_versions.join(', ') }})
|
||||
</span>
|
||||
@@ -57,8 +59,7 @@
|
||||
|
||||
<script setup>
|
||||
import { DownloadIcon, XIcon } from '@modrinth/assets'
|
||||
import { Button, injectNotificationManager } from '@modrinth/ui'
|
||||
import { formatCategory } from '@modrinth/utils'
|
||||
import { Button, formatLoader, injectNotificationManager, useVIntl } from '@modrinth/ui'
|
||||
import { ref } from 'vue'
|
||||
import Multiselect from 'vue-multiselect'
|
||||
|
||||
@@ -67,6 +68,7 @@ import { trackEvent } from '@/helpers/analytics'
|
||||
import { add_project_from_version as installMod } from '@/helpers/profile'
|
||||
|
||||
const { handleError } = injectNotificationManager()
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const instance = ref(null)
|
||||
const project = ref(null)
|
||||
|
||||
@@ -159,20 +159,21 @@ const reset_icon = () => {
|
||||
const createInstance = async () => {
|
||||
creatingInstance.value = true
|
||||
|
||||
const loader =
|
||||
versions.value[0].loaders[0] !== 'forge' &&
|
||||
versions.value[0].loaders[0] !== 'fabric' &&
|
||||
versions.value[0].loaders[0] !== 'quilt'
|
||||
? 'vanilla'
|
||||
: versions.value[0].loaders[0]
|
||||
const gameVersions = versions.value[0].game_versions
|
||||
const gameVersion = gameVersions[0]
|
||||
|
||||
const id = await create(
|
||||
name.value,
|
||||
versions.value[0].game_versions[0],
|
||||
loader,
|
||||
'latest',
|
||||
icon.value,
|
||||
).catch(handleError)
|
||||
const loaders = versions.value[0].loaders
|
||||
const loader = loaders.contains('fabric')
|
||||
? 'fabric'
|
||||
: loaders.contains('neoforge')
|
||||
? 'neoforge'
|
||||
: loaders.contains('forge')
|
||||
? 'forge'
|
||||
: loaders.contains('quilt')
|
||||
? 'quilt'
|
||||
: 'vanilla'
|
||||
|
||||
const id = await create(name.value, gameVersion, loader, 'latest', icon.value).catch(handleError)
|
||||
|
||||
await installMod(id, versions.value[0].id).catch(handleError)
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
import {
|
||||
DownloadIcon,
|
||||
getLoaderIcon,
|
||||
HammerIcon,
|
||||
IssuesIcon,
|
||||
SpinnerIcon,
|
||||
@@ -17,16 +18,11 @@ import {
|
||||
Chips,
|
||||
Combobox,
|
||||
defineMessages,
|
||||
formatLoader,
|
||||
injectNotificationManager,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import {
|
||||
formatCategory,
|
||||
type GameVersionTag,
|
||||
type PlatformTag,
|
||||
type Project,
|
||||
type Version,
|
||||
} from '@modrinth/utils'
|
||||
import type { GameVersionTag, PlatformTag, Project, Version } from '@modrinth/utils'
|
||||
import dayjs from 'dayjs'
|
||||
import { computed, type ComputedRef, type Ref, ref, shallowRef, watch } from 'vue'
|
||||
|
||||
@@ -129,9 +125,7 @@ if (props.instance.linked_data && props.instance.linked_data.project_id && !prop
|
||||
fetching.value = false
|
||||
}
|
||||
|
||||
const currentLoaderIcon = computed(
|
||||
() => loaders?.value.find((x) => x.name === props.instance.loader)?.icon,
|
||||
)
|
||||
const currentLoaderIcon = computed(() => getLoaderIcon(props.instance.loader))
|
||||
|
||||
const gameVersionsForLoader = computed(() => {
|
||||
return all_game_versions?.value.filter((item) => {
|
||||
@@ -550,7 +544,7 @@ const messages = defineMessages({
|
||||
v-else
|
||||
class="w-10 h-10 flex items-center justify-center rounded-full bg-button-bg border-solid border-[1px] border-button-border p-2 [&_svg]:h-full [&_svg]:w-full"
|
||||
>
|
||||
<div v-if="!!currentLoaderIcon" class="contents" v-html="currentLoaderIcon" />
|
||||
<component :is="currentLoaderIcon" v-if="currentLoaderIcon" />
|
||||
<WrenchIcon v-else />
|
||||
</div>
|
||||
<div class="flex flex-col gap-2 justify-center">
|
||||
@@ -569,7 +563,7 @@ const messages = defineMessages({
|
||||
? modpackVersion
|
||||
? modpackVersion?.version_number
|
||||
: 'Unknown version'
|
||||
: formatCategory(instance.loader)
|
||||
: formatLoader(formatMessage, instance.loader)
|
||||
}}
|
||||
<template v-if="instance.loader !== 'vanilla' && !modpackProject">
|
||||
{{ instance.loader_version || formatMessage(messages.unknownVersion) }}
|
||||
@@ -677,7 +671,11 @@ const messages = defineMessages({
|
||||
</div>
|
||||
<template v-if="loader !== 'vanilla'">
|
||||
<h2 class="m-0 mt-4 text-lg font-extrabold text-contrast block">
|
||||
{{ formatMessage(messages.loaderVersion, { loader: formatCategory(loader) }) }}
|
||||
{{
|
||||
formatMessage(messages.loaderVersion, {
|
||||
loader: formatLoader(formatMessage, loader),
|
||||
})
|
||||
}}
|
||||
</h2>
|
||||
<Combobox
|
||||
v-if="selectableLoaderVersions"
|
||||
@@ -709,7 +707,7 @@ const messages = defineMessages({
|
||||
? messages.alreadyInstalledVanilla
|
||||
: messages.alreadyInstalledModded,
|
||||
{
|
||||
platform: formatCategory(loader),
|
||||
platform: formatLoader(formatMessage, loader),
|
||||
version: instance.loader_version,
|
||||
game_version: gameVersion,
|
||||
},
|
||||
|
||||
@@ -7,7 +7,14 @@ import {
|
||||
MonitorIcon,
|
||||
WrenchIcon,
|
||||
} from '@modrinth/assets'
|
||||
import { Avatar, defineMessage, TabbedModal, type TabbedModalTab, useVIntl } from '@modrinth/ui'
|
||||
import {
|
||||
Avatar,
|
||||
commonMessages,
|
||||
defineMessage,
|
||||
TabbedModal,
|
||||
type TabbedModalTab,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { convertFileSrc } from '@tauri-apps/api/core'
|
||||
import { ref } from 'vue'
|
||||
|
||||
@@ -74,11 +81,6 @@ function show() {
|
||||
}
|
||||
|
||||
defineExpose({ show })
|
||||
|
||||
const titleMessage = defineMessage({
|
||||
id: 'instance.settings.title',
|
||||
defaultMessage: 'Settings',
|
||||
})
|
||||
</script>
|
||||
<template>
|
||||
<ModalWrapper ref="modal">
|
||||
@@ -90,7 +92,9 @@ const titleMessage = defineMessage({
|
||||
:tint-by="props.instance.path"
|
||||
/>
|
||||
{{ instance.name }} <ChevronRightIcon />
|
||||
<span class="font-extrabold text-contrast">{{ formatMessage(titleMessage) }}</span>
|
||||
<span class="font-extrabold text-contrast">{{
|
||||
formatMessage(commonMessages.settingsLabel)
|
||||
}}</span>
|
||||
</span>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"message": "إدارة الموارد"
|
||||
},
|
||||
"app.update-toast.body": {
|
||||
"message": "تطبيق Modrinth الإصدار {version} جاهز للتثبيت! أعد التحميل لتحديث التطبيق الآن، أو سيتم التحديث تلقائيًا عند إغلاق تطبيق Modrinth."
|
||||
"message": "تطبيق Modrinth الإصدار {version} جاهز للتثبيت!\nأعد التحميل لتحديث التطبيق الآن، أو سيتم التحديث تلقائيًا عند إغلاق تطبيق Modrinth."
|
||||
},
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "تطبيق Modrinth الإصدار {version} جاهز للتثبيت!\nأعد التحميل لتحديث التطبيق الآن، أو سيتم التحديث تلقائيًا عند إغلاق تطبيق Modrinth."
|
||||
@@ -87,7 +87,7 @@
|
||||
"message": "جار إضافة صديق"
|
||||
},
|
||||
"friends.add-friend.username.description": {
|
||||
"message": "قد يختلف عن اسم المستخدم الخاص بهم في Minecraft!"
|
||||
"message": "قد يختلف عن اسم المستخدم الخاص بهم في ماينكرافت!"
|
||||
},
|
||||
"friends.add-friend.username.placeholder": {
|
||||
"message": "أدخل اسم مستخدم Modrinth..."
|
||||
@@ -141,7 +141,7 @@
|
||||
"message": "إضافة واللعب"
|
||||
},
|
||||
"instance.add-server.add-server": {
|
||||
"message": "إضافة الخادم"
|
||||
"message": "إضافة خادم"
|
||||
},
|
||||
"instance.add-server.resource-pack.disabled": {
|
||||
"message": "معطَّل"
|
||||
@@ -186,7 +186,7 @@
|
||||
"message": "الاسم"
|
||||
},
|
||||
"instance.server-modal.placeholder-name": {
|
||||
"message": "خادم ماين كرافت"
|
||||
"message": "خادم ماينكرافت"
|
||||
},
|
||||
"instance.server-modal.resource-pack": {
|
||||
"message": "حزمة الموارد"
|
||||
@@ -279,7 +279,7 @@
|
||||
"message": "مُغلِّف"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper.description": {
|
||||
"message": "أمر غلاف لتشغيل ماين كرافت."
|
||||
"message": "أمر غلاف لتشغيل ماينكرافت."
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper.enter": {
|
||||
"message": "أدخل أمر الغلاف..."
|
||||
@@ -288,7 +288,7 @@
|
||||
"message": "تثبيت"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} لماين كرافت {game_version} مثبت بالفعل"
|
||||
"message": "{platform} {version} لماينكرافت {game_version} مثبت بالفعل"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "فانيلا {game_version} مُثبّتة بالفعل"
|
||||
@@ -470,9 +470,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "أدخل العرض..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "الإعدادات"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "خادم ماين كرافت"
|
||||
},
|
||||
|
||||
@@ -33,10 +33,13 @@
|
||||
"message": "Správa zdrojů"
|
||||
},
|
||||
"app.update-toast.body": {
|
||||
"message": "Aplikace Modrinth v{version} je připravena k instalaci! Naninstalujte aktualizaci nyní nebo automaticky po zavření aplikace Modrinth."
|
||||
"message": "Aplikace Modrinth v{version} je připravena k instalaci! Nainstalujte aktualizaci nyní nebo automaticky po zavření aplikace Modrinth."
|
||||
},
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Stahování aplikace Modrinth v{version} bylo dokončeno. Naninstalujte aktualizaci nyní nebo automaticky po zavření aplikace Modrinth."
|
||||
"message": "Stahování aplikace Modrinth v{version} bylo dokončeno. Nainstalujte aktualizaci nyní nebo automaticky po zavření aplikace Modrinth."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Modrinth App v{version} je k dispozici. Aktualizujte pomocí svého správce balíčků, abyste získali nejnovější funkce a opravy!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Aplikace Modrinth v{version} je nyní k dispozici! Protože jste v měřené síti, nebyla stažena automaticky."
|
||||
@@ -47,6 +50,9 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "Stahování ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Stáhnout"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Stahování..."
|
||||
},
|
||||
@@ -77,6 +83,9 @@
|
||||
"friends.action.add-friend": {
|
||||
"message": "Přidat přítele"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} {count, plural, one {žádost} few {žádosti} other {žádostí}} o přátelství"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Poslat žádost o přátelství"
|
||||
},
|
||||
@@ -467,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Zadejte šířku..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Nastavení"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Minecraft Server"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"app.auth-servers.unreachable.body": {
|
||||
"message": "Minecraft autentificeringsservere kan måske være nede lige nu. Tjek din internet forbindelse og prøv igen senere."
|
||||
"message": "Minecraft authentication servere kan måske være nede lige nu. Tjek din internet forbindelse og prøv igen senere."
|
||||
},
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Kan ikke nå autentificeringsservere"
|
||||
@@ -23,6 +23,9 @@
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Javainstallationer"
|
||||
},
|
||||
"app.settings.tabs.language": {
|
||||
"message": "Sprog"
|
||||
},
|
||||
"app.settings.tabs.privacy": {
|
||||
"message": "Privatliv"
|
||||
},
|
||||
@@ -258,7 +261,7 @@
|
||||
"message": "Kørte efter spillet lukkes."
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit.enter": {
|
||||
"message": "Indskriv post-exit kommando..."
|
||||
"message": "Indtast post-exit kommando..."
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch": {
|
||||
"message": "Pre-launch"
|
||||
@@ -267,7 +270,7 @@
|
||||
"message": "Kørt før en instance bliver kørt."
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch.enter": {
|
||||
"message": "Indskriv pre-launch kommando..."
|
||||
"message": "Indtast pre-launch kommando..."
|
||||
},
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Spille lunch hooks"
|
||||
@@ -279,7 +282,7 @@
|
||||
"message": "Wrapper kommando for at køre Minecraft."
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper.enter": {
|
||||
"message": "Indskriv wrapper kommando..."
|
||||
"message": "Indtast wrapper kommando..."
|
||||
},
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "Installation"
|
||||
@@ -456,7 +459,7 @@
|
||||
"message": "Højden af spillevinduet når kørt."
|
||||
},
|
||||
"instance.settings.tabs.window.height.enter": {
|
||||
"message": "Indskriv højde..."
|
||||
"message": "Indtast højde..."
|
||||
},
|
||||
"instance.settings.tabs.window.width": {
|
||||
"message": "Bredde"
|
||||
@@ -465,10 +468,7 @@
|
||||
"message": "Bredden på spille vinduet når kørt."
|
||||
},
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Indskriv bredde..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Indstillinger"
|
||||
"message": "Indtast bredde..."
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "En Minecraft server"
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Modrinth App v{version} wurde heruntergeladen. Lade die App neu, oder schliesse sie, um zu aktualisieren."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Modrinth App v{version} ist verfügbar. Benutze deinen Paketmanager zum aktualisieren um die neusten Features und Bugfixes zu erhalten!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Modrinth App v{version} ist jetzt verfügbar! Da du in einem begrenzten Netzwerk bist, haben wir es nicht automatisch heruntergeladen."
|
||||
},
|
||||
@@ -47,6 +50,9 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "Herunterladen ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Herunterladen"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Lade herunter..."
|
||||
},
|
||||
@@ -470,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Breite eingeben..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Einstellungen"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Ä Minecraft-Server"
|
||||
},
|
||||
|
||||
@@ -33,10 +33,13 @@
|
||||
"message": "Ressourcenmanagement"
|
||||
},
|
||||
"app.update-toast.body": {
|
||||
"message": "Modrinth App v{version} ist bereit zur Installation! Jetzt neu laden, um zu aktualisieren, oder automatisch beim Schließen der Modrinth App."
|
||||
"message": "Modrinth App v{version} ist bereit zur Installation! Neu laden, um jetzt zu aktualisieren, oder automatisch, wenn du die Modrinth App schließt."
|
||||
},
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Modrinth App v{version} ist bereit zur Installation! Jetzt neu laden, um zu aktualisieren, oder automatisch beim Schließen der Modrinth App."
|
||||
"message": "Modrinth App v{version} wurde heruntergeladen. Neu laden, um jetzt zu aktualisieren, oder automatisch, wenn du die Modrinth App schließt."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Modrinth App v{version} ist verfügbar. Verwende deinen Paketmanager, um die neuesten Funktionen und Fehlerbehebungen zu installieren!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Modrinth App v{version} ist jetzt verfügbar! Da du ein getaktetes Netzwerk nutzt, haben wir den Download nicht automatisch gestartet."
|
||||
@@ -47,6 +50,9 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "Herunterladen ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Herunterladen"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Wird Heruntergeladen..."
|
||||
},
|
||||
@@ -72,7 +78,7 @@
|
||||
"message": "Update wird heruntergeladen ({percent}%)"
|
||||
},
|
||||
"app.update.reload-to-update": {
|
||||
"message": "Neu laden um Update zu installieren"
|
||||
"message": "Neu laden, um das Update zu installieren"
|
||||
},
|
||||
"friends.action.add-friend": {
|
||||
"message": "Freund hinzufügen"
|
||||
@@ -105,7 +111,7 @@
|
||||
"message": "Freund entfernen"
|
||||
},
|
||||
"friends.friend.request-sent": {
|
||||
"message": "Freundesanfrage gesendet"
|
||||
"message": "Freundschaftsanfrage gesendet"
|
||||
},
|
||||
"friends.friend.view-profile": {
|
||||
"message": "Profil anzeigen"
|
||||
@@ -270,7 +276,7 @@
|
||||
"message": "Wird vor dem Starten der Instanz ausgeführt."
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch.enter": {
|
||||
"message": "Vor Spielstart auszuführender Befehl eingeben..."
|
||||
"message": "Vor Spielstart auszuführenden Befehl eingeben..."
|
||||
},
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Start-Hooks"
|
||||
@@ -470,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Breite eingeben..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Einstellungen"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Ein Minecraft-Server"
|
||||
},
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Modrinth App v{version} has finished downloading. Reload to update now, or automatically when you close Modrinth App."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Modrinth App v{version} is available. Use your package manager to update for the latest features and fixes!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Modrinth App v{version} is available now! Since you're on a metered network, we didn't automatically download it."
|
||||
},
|
||||
@@ -47,6 +50,9 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "Download ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Download"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Downloading..."
|
||||
},
|
||||
@@ -470,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Enter width..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Settings"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "A Minecraft Server"
|
||||
},
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "La descarga de la Modrinth App v{version} ha finalizado. Actualiza ahora o automáticamente al cerrar la aplicación Modrinth."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "La aplicación Modrinth v{version} ya está disponible. ¡Utiliza tu gestor de paquetes para actualizarla y disfrutar de las últimas funciones y correcciones!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "¡Modrinth App v{version} ya está disponible! Como estás en una red con límite de datos, no se descargó automáticamente."
|
||||
},
|
||||
@@ -47,6 +50,9 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "Descargar ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Descargar"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Descargando..."
|
||||
},
|
||||
@@ -189,7 +195,7 @@
|
||||
"message": "Servidor de Minecraft"
|
||||
},
|
||||
"instance.server-modal.resource-pack": {
|
||||
"message": "Resource pack"
|
||||
"message": "Paquete de recursos"
|
||||
},
|
||||
"instance.settings.tabs.general": {
|
||||
"message": "General"
|
||||
@@ -470,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Ingresa el ancho..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Configuración"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Un servidor de Minecraft"
|
||||
},
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
{
|
||||
"app.auth-servers.unreachable.body": {
|
||||
"message": "Los servidores de autenticación de Minecraft podrían estar inactivos. Comprueba tu conexión a internet e inténtalo más tarde."
|
||||
},
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "No se puede conectar con los servidores de autenticación"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Modo desarrollador activado."
|
||||
},
|
||||
@@ -18,7 +24,7 @@
|
||||
"message": "Instalaciones de Java"
|
||||
},
|
||||
"app.settings.tabs.language": {
|
||||
"message": "Lenguaje"
|
||||
"message": "Idioma"
|
||||
},
|
||||
"app.settings.tabs.privacy": {
|
||||
"message": "Privacidad"
|
||||
@@ -32,6 +38,9 @@
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "La descarga de la versión v{version} de Modrinth ha finalizado. Actualice ahora o automáticamente al cerrar la aplicación."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Modrinth App v{version} está disponible. ¡Usa tu gestor de paquetes para actualizar a la última versión con nuevas funciones y correcciones!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "¡La versión v{version} de Modrinth App ya está disponible! Como estás conectado a una red con límite de datos, no la hemos descargado automáticamente."
|
||||
},
|
||||
@@ -41,6 +50,9 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "Descarga ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Descargar"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Descargando..."
|
||||
},
|
||||
@@ -464,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Introduzca el ancho..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Ajustes"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Un Servidor de Minecraft"
|
||||
},
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Java asennukset"
|
||||
},
|
||||
"app.settings.tabs.language": {
|
||||
"message": "Kieli"
|
||||
},
|
||||
"app.settings.tabs.privacy": {
|
||||
"message": "Yksityisyys"
|
||||
},
|
||||
@@ -48,7 +51,7 @@
|
||||
"message": "Ladataan..."
|
||||
},
|
||||
"app.update-toast.reload": {
|
||||
"message": "Lataa uudelleen"
|
||||
"message": "Uudelleen lataa"
|
||||
},
|
||||
"app.update-toast.title": {
|
||||
"message": "Päivitys saatavilla"
|
||||
@@ -78,13 +81,13 @@
|
||||
"message": "{count} ystävä{count, plural, one {pyyntö} other {pyyntöä}}"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Lähetä ystäväpyyntö"
|
||||
"message": "Lähetä kaveripyyntö"
|
||||
},
|
||||
"friends.add-friend.title": {
|
||||
"message": "Lisätään ystävää"
|
||||
"message": "Lisätään kaveria"
|
||||
},
|
||||
"friends.add-friend.username.description": {
|
||||
"message": "Se voi olla eri kuin heidän Minecraft-käyttäjänimensä!"
|
||||
"message": "Se ei voi olla eri kuin heidän Minecraft-käyttäjänimi!"
|
||||
},
|
||||
"friends.add-friend.username.placeholder": {
|
||||
"message": "Syötä Modrinth-käyttäjätunnus..."
|
||||
@@ -467,9 +470,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Syötä leveys..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Asetukset"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Minecraft palvelin"
|
||||
},
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Tapos nang ma-download ang Modrinth App v{version}. Mag-reload upang ma-update ngayon, o awtomatiko sa pagsara ng Modrinth App."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Magagamit na ngayon ang Modrinth App v{version}. Gamitin ang iyong package manager upang i-update sa pinabagong tampok at pag-aayos!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Magagamit na ngayon ang Modrinth App v{version}! Hindi namin dinanload kaagad dahil naka-metro ang inyong network."
|
||||
},
|
||||
@@ -47,6 +50,9 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "I-download ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "I-download"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Nagda-download..."
|
||||
},
|
||||
@@ -470,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Ilagay ang lapad..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Mga Setting"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Isang Minecraft Server"
|
||||
},
|
||||
|
||||
@@ -33,13 +33,16 @@
|
||||
"message": "Gestion des ressources"
|
||||
},
|
||||
"app.update-toast.body": {
|
||||
"message": "L'application Modrinth v{version} est prête à être installée ! Relancez l'application pour faire la mise à jour maintenant, ou automatiquement à la fermeture de l'application Modrinth."
|
||||
"message": "Modrinth App v{version} est prête à être installée ! Relancez l'application pour faire la mise à jour maintenant, ou automatiquement à la fermeture de Modrinth App."
|
||||
},
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Le téléchargement de l'application Modrinth v{version} est terminé ! Relancez l'application pour faire la mise à jour maintenant, ou automatiquement à la fermeture de l'application Modrinth."
|
||||
"message": "Le téléchargement de Modrinth App v{version} est terminé ! Relancez l'application pour mettre à jour maintenant, ou automatiquement à la fermeture de Modrinth App."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Modrith App v{version} est disponible. Utilisez votre gestionnaire de paquets pour obtenir les changements de la mise à jour !"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "L'application Modrinth v{version} est disponible dès maintenant ! Lorsque vous êtes sur un réseau limité ou en données mobiles, nous ne téléchargerons pas les mises à jour automatiquement."
|
||||
"message": "Modrinth App v{version} est disponible dès maintenant ! Lorsque vous êtes sur un réseau limité ou en données mobiles, nous ne téléchargerons pas les mises à jour automatiquement."
|
||||
},
|
||||
"app.update-toast.changelog": {
|
||||
"message": "Journal des modifications"
|
||||
@@ -47,6 +50,9 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "Télécharger ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Télécharger"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Téléchargement..."
|
||||
},
|
||||
@@ -78,7 +84,7 @@
|
||||
"message": "Ajouter un ami"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} {count, plural,one {demande}other {demandes}} d'ami"
|
||||
"message": "{count} {count, plural, one {demande} other {demandes}} d'ami"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Envoyer une demande d'ami"
|
||||
@@ -126,7 +132,7 @@
|
||||
"message": "En attente"
|
||||
},
|
||||
"friends.no-friends-match": {
|
||||
"message": "Aucuns amis ne correspondent à \"{query}\""
|
||||
"message": "Aucuns amis ne correspondent à « {query} »"
|
||||
},
|
||||
"friends.search-friends-placeholder": {
|
||||
"message": "Chercher des amis..."
|
||||
@@ -249,7 +255,7 @@
|
||||
"message": "Crochets de lancement"
|
||||
},
|
||||
"instance.settings.tabs.hooks.custom-hooks": {
|
||||
"message": "Crochets de lancement custom"
|
||||
"message": "Crochets de lancement personnalisés"
|
||||
},
|
||||
"instance.settings.tabs.hooks.description": {
|
||||
"message": "Les crochets permettent aux usagers avancés d'exécuter certaines commandes systèmes avant et après le lancement du jeu."
|
||||
@@ -258,7 +264,7 @@
|
||||
"message": "Post-fermeture"
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit.description": {
|
||||
"message": "Exécuté après fermeture."
|
||||
"message": "Exécuté après la fermeture du jeu."
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit.enter": {
|
||||
"message": "Entrer commande de post-fermeture..."
|
||||
@@ -369,7 +375,7 @@
|
||||
"message": "Réparation"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "La réparation réinstalle les dépendances de Minecraft et vérifie la corruption. Cela peut résoudre les problèmes de lancement du jeu en raison d'erreurs liées au lanceur, mais ne résoudra pas les problèmes ou plantages liés aux mods installés."
|
||||
"message": "La réparation réinstalle les dépendances de Minecraft et vérifie la corruption. Cela peut résoudre les problèmes de lancement du jeu en raison d'erreurs liées au launcher, mais ne résoudra pas les problèmes ou plantages liés aux mods installés."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Réparer l'instance ?"
|
||||
@@ -384,7 +390,7 @@
|
||||
"message": "Voir toutes les versions"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "Changer la version"
|
||||
"message": "changer la version"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "installer"
|
||||
@@ -470,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Entrer la largeur..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Paramètres"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Un Serveur Minecraft"
|
||||
},
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "התקנות ג'אווה"
|
||||
},
|
||||
"app.settings.tabs.language": {
|
||||
"message": "שפה"
|
||||
},
|
||||
"app.settings.tabs.privacy": {
|
||||
"message": "פרטיות"
|
||||
},
|
||||
@@ -80,6 +83,9 @@
|
||||
"friends.add-friend.title": {
|
||||
"message": "מוסיף חבר"
|
||||
},
|
||||
"friends.add-friend.username.description": {
|
||||
"message": "זה יכול להיות שונה מהמשתמש מיינקראפט שלהם!"
|
||||
},
|
||||
"friends.add-friend.username.placeholder": {
|
||||
"message": "הכנס שם משתמש של Modrinth..."
|
||||
},
|
||||
@@ -461,9 +467,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "הכנס רוחב..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "הגדרות"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "שרת מיינקראפט"
|
||||
},
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "A Modrinth App v{version} letöltése befejeződött. Frissítéshez indítsa újra az alkalmazást, vagy zárja be a Modrinth App alkalmazást, és a frissítés automatikusan megtörténik."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "A Modrinth alkalmazás v{version} elérhető. Használd a csomagkezelődet a legújabb funkciók és hibajavítások telepítéséhez!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "A Modrinth App v{version} már elérhető! Mivel díjköteles hálózaton vagy, így nem töltöttük le automatikusan."
|
||||
},
|
||||
@@ -47,6 +50,9 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "Letöltés ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Letöltés"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Letöltés..."
|
||||
},
|
||||
@@ -237,10 +243,10 @@
|
||||
"message": "Új csoport létrehozása"
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups.description": {
|
||||
"message": "A könyvtárgyűjtemények segítenek külön kategóriákba rendszerezni a profiljaidat."
|
||||
"message": "A könyvtárgyűjtemények segítenek külön kategóriákba rendszerezni a profiljait."
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups.enter-name": {
|
||||
"message": "Add meg a gyűjtemény nevét"
|
||||
"message": "Adja meg a gyűjtemény nevét"
|
||||
},
|
||||
"instance.settings.tabs.general.name": {
|
||||
"message": "Név"
|
||||
@@ -273,7 +279,7 @@
|
||||
"message": "Írjon be indítás előtti parancsokat..."
|
||||
},
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Játék indítási parancsok"
|
||||
"message": "Játék indítási horgok"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper": {
|
||||
"message": "Indítóparancs"
|
||||
@@ -288,7 +294,7 @@
|
||||
"message": "Telepítés"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} már telepítve van ehhez: Minecraft {game_version}"
|
||||
"message": "{platform} {version} a Minecraft {game_version} verziójához már telepítve van"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "A vanilla {game_version} már telepítve van"
|
||||
@@ -333,40 +339,40 @@
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Nem lehetséges a csatolt modcsomag részleteit lekérdezni. Kérlek nézd meg az internetkapcsolatod."
|
||||
"message": "Nem lehetséges a csatolt modpack részleteit lekérdezni. Kérlek nézd meg az internetkapcsolatod."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} nem elérhető a Minecraft {version} verziójához. Próbálj meg egy másik modbetöltőt."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "A profilod linkelve van egy Modrinth modcsomaghoz, de a modcsomag nem található online."
|
||||
"message": "A profilod linkelve van egy Modrinth modcsomaghoz, de a modcsomag nem található Modrinth-on."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Platform"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Modcsomag újratelepítése"
|
||||
"message": "Modpack újratelepítése"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Modcsomag újratelepítése"
|
||||
"message": "Modpack újratelepítése"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Az újratelepítés visszaállítja az összes telepített vagy módosított tartalmat a modcsomag által biztosított állapotra, eltávolítva az eredeti telepítéshez hozzáadott modokat vagy tartalmakat. Ez megoldhatja a váratlan hibákat, de fontos tudni hogyha használsz világokat amelyekben utólagosan hozzáadott tartalom van, azok a világok korruptálódhatnak."
|
||||
"message": "Az újratelepítés visszaállítja az összes telepített vagy módosított tartalmat a modcsomag által biztosított állapotra, eltávolítva az eredeti telepítéshez hozzáadott modokat vagy tartalmakat. Ez megoldhatja a váratlan hibákat, de fontos tudni hogyha használsz világokat amelyekben utólagosan hozzáadott tartalom van, azok a világok elromolhatnak."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Biztosan szeretnéd újratelepíteni ezt a profilt?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Visszaállítja a profilod tartalmát az eredeti állapotába, eltávolítva az eredeti modcsomaghoz hozzáadott összes modot és tartalmat."
|
||||
"message": "Visszaállítja a profilod tartalmát az eredeti állapotába, eltávolítva az eredeti modpackhez hozzáadott összes modot és tartalmat."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Modcsomag újratelepítése"
|
||||
"message": "Modpack újratelepítése"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Javítás"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button.repairing": {
|
||||
"message": "Javítás"
|
||||
"message": "Javítás folyamatban"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "A javítás újratelepíti a Minecraft alapját és ellenőrzi, hogy nincs-e sérülés. Ez megoldhatja a problémákat, ha a játék nem az indítóval kapcsolatos hibák miatt nem indul el, de nem oldja meg a telepített modokkal kapcsolatos problémákat vagy összeomlásokat."
|
||||
@@ -396,13 +402,13 @@
|
||||
"message": "javítás"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-installing": {
|
||||
"message": "Nem lehet {action} telepítés közben"
|
||||
"message": "Nem lehet {action}-t végrehajtani telepítés közben"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Offline állapotban nem lehet {action} végrehajtani"
|
||||
"message": "Offline állapotban nem lehet {action}-t végrehajtani"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Nem lehet {action} javítás közben"
|
||||
"message": "Nem lehet {action}-t végrehajtani javítás közben"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(ismeretlen verzió)"
|
||||
@@ -470,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Szélesség megadása..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Beállítások"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Egy Minecraft szerver"
|
||||
},
|
||||
@@ -513,7 +516,7 @@
|
||||
"message": "Szerver"
|
||||
},
|
||||
"instance.worlds.type.singleplayer": {
|
||||
"message": "Egyjátékos"
|
||||
"message": "Egyjátékosmód"
|
||||
},
|
||||
"instance.worlds.view_instance": {
|
||||
"message": "Profil megtekintése"
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"app.auth-servers.unreachable.body": {
|
||||
"message": "Peladen autentikasi Minecraft mungkin sedang tidak tersedia saat ini. Periksa koneksi internet Anda dan coba lagi nanti."
|
||||
"message": "Server autentikasi Minecraft mungkin sedang tidak tersedia saat ini. Periksa koneksi internet Anda dan coba lagi nanti."
|
||||
},
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Tidak dapat terhubung ke peladen autentikasi"
|
||||
"message": "Tidak dapat terhubung ke server autentikasi"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Mode pengembang dihidupkan."
|
||||
@@ -38,15 +38,21 @@
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Modrinth App v{version} telah selesai mengunduh. Muat ulang untuk memperbarui sekarang, atau secara otomatis saat Anda menutup Modrinth App."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Modrinth App v{version} tersedia. Gunakan pengelola paket Anda untuk memperbarui dan mendapatkan fitur-fitur dan perbaikan terbaru!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Modrinth App v{version} sudah tersedia! Karena Anda saat ini sedang berada dalam jaringan terukur, kami tidak mengunduhnya secara otomatis."
|
||||
},
|
||||
"app.update-toast.changelog": {
|
||||
"message": "Log perubahan"
|
||||
"message": "Catatan perubahan"
|
||||
},
|
||||
"app.update-toast.download": {
|
||||
"message": "Unduh ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Unduh"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Mengunduh..."
|
||||
},
|
||||
@@ -60,7 +66,7 @@
|
||||
"message": "Selesai mengunduh"
|
||||
},
|
||||
"app.update.complete-toast.text": {
|
||||
"message": "Klik di sini untuk melihat log perubahan."
|
||||
"message": "Klik di sini untuk melihat catatan perubahan."
|
||||
},
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "Versi {version} berhasil dipasang!"
|
||||
@@ -93,7 +99,7 @@
|
||||
"message": "Masukkan nama pengguna Modrinth..."
|
||||
},
|
||||
"friends.add-friend.username.title": {
|
||||
"message": "Apakah nama pengguna Modrinth teman Anda?"
|
||||
"message": "Apa nama pengguna Modrinth teman Anda?"
|
||||
},
|
||||
"friends.add-friends-to-share": {
|
||||
"message": "<link>Tambah teman</link> untuk melihat apa yang mereka mainkan!"
|
||||
@@ -141,7 +147,7 @@
|
||||
"message": "Tambah dan mainkan"
|
||||
},
|
||||
"instance.add-server.add-server": {
|
||||
"message": "Tambah peladen"
|
||||
"message": "Tambah server"
|
||||
},
|
||||
"instance.add-server.resource-pack.disabled": {
|
||||
"message": "Dimatikan"
|
||||
@@ -153,10 +159,10 @@
|
||||
"message": "Konfirmasi"
|
||||
},
|
||||
"instance.add-server.title": {
|
||||
"message": "Tambah peladen"
|
||||
"message": "Tambah server"
|
||||
},
|
||||
"instance.edit-server.title": {
|
||||
"message": "Sunting peladen"
|
||||
"message": "Sunting server"
|
||||
},
|
||||
"instance.edit-world.hide-from-home": {
|
||||
"message": "Sembunyikan dari Beranda"
|
||||
@@ -186,7 +192,7 @@
|
||||
"message": "Nama"
|
||||
},
|
||||
"instance.server-modal.placeholder-name": {
|
||||
"message": "Peladen Minecraft"
|
||||
"message": "Server Minecraft"
|
||||
},
|
||||
"instance.server-modal.resource-pack": {
|
||||
"message": "Paket sumber"
|
||||
@@ -216,7 +222,7 @@
|
||||
"message": "Gandakan wujud"
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-instance.description": {
|
||||
"message": "Membuat salinan dari wujud ini, termasuk dunia, konfig, modifikasi, dsb."
|
||||
"message": "Membuat salinan dari wujud ini, termasuk dunia, konfigurasi, mod, dsb."
|
||||
},
|
||||
"instance.settings.tabs.general.edit-icon": {
|
||||
"message": "Sunting ikon"
|
||||
@@ -303,7 +309,7 @@
|
||||
"message": "Memasang"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Memperoleh versi paket modifikasi"
|
||||
"message": "Memperoleh versi paket mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Memasang versi baru"
|
||||
@@ -315,7 +321,7 @@
|
||||
"message": "Informasi awakutu:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Memperoleh perincian paket modifikasi"
|
||||
"message": "Memperoleh perincian paket mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Versi permainan"
|
||||
@@ -333,34 +339,34 @@
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Tidak dapat memperoleh perincian paket modifikasi terkait. Mohon periksa sambungan internet Anda."
|
||||
"message": "Tidak dapat memperoleh perincian paket mod terkait. Mohon periksa sambungan internet Anda."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} tidak tersedia untuk Minecraft {version}. Mohon coba peluncur modifikasi yang lain."
|
||||
"message": "{loader} tidak tersedia untuk Minecraft {version}. Mohon coba peluncur mod yang lain."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Wujud ini berkaitan dengan paket modifikasi, tetapi paket modifikasi tersebut tidak dapat ditemukan pada Modrinth."
|
||||
"message": "Wujud ini berkaitan dengan paket mod, tetapi paket mod tersebut tidak dapat ditemukan pada Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Platform"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button": {
|
||||
"message": "Pasang ulang paket modifikasi"
|
||||
"message": "Pasang ulang paket mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.button.reinstalling": {
|
||||
"message": "Memasang ulang paket modifikasi"
|
||||
"message": "Memasang ulang paket mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Memasang ulang akan mengatur ulang semua konten yang terpasang atau termodifikasi pada apa yang telah disediakan oleh paket modifikasi, menghapus modifikasi atau konten apa pun yang telah Anda tambahkan di atas pemasangan awal. Hal ini dapat memperbaiki perilaku tidak terduga bila ada perubahan pada wujud, tetapi bila dunia Anda sekarang bergantung pada konten terpasang tambahan, hal ini dapat merusak dunia yang ada."
|
||||
"message": "Memasang ulang akan mengatur ulang semua konten yang terpasang atau termodifikasi pada apa yang telah disediakan oleh paket mod, menghapus mod atau konten apa pun yang telah Anda tambahkan di atas pemasangan awal. Hal ini dapat memperbaiki perilaku tidak terduga bila ada perubahan pada wujud, tetapi bila dunia Anda sekarang bergantung pada konten terpasang tambahan, hal ini dapat merusak dunia yang ada."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Apakah Anda yakin ingin memasang ulang wujud ini?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Mengatur ulang konten wujud menjadi keadaan awal, menghapus modifikasi atau konten apa pun yang telah Anda tambahkan di atas pemasangan awal."
|
||||
"message": "Mengatur ulang konten wujud menjadi keadaan awal, menghapus mod atau konten apa pun yang telah Anda tambahkan di atas pemasangan awal."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Pasang ulang paket modifikasi"
|
||||
"message": "Pasang ulang paket mod"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.button": {
|
||||
"message": "Perbaiki"
|
||||
@@ -369,7 +375,7 @@
|
||||
"message": "Memperbaiki"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Memperbaiki akan memasangkan ulang pustaka dependen dan memeriksa kerusakan. Ini dapat memecahkan masalah bila permainan Anda tidak memulai sebab kesalahan pada peluncur, tetapi tidak akan memecahkan masalah atau kemogokan yang disebabkan oleh modifikasi terpasang."
|
||||
"message": "Memperbaiki akan memasangkan ulang pustaka dependen dan memeriksa kerusakan. Ini dapat memecahkan masalah bila permainan Anda tidak memulai sebab kesalahan pada peluncur, tetapi tidak akan memecahkan masalah atau kemogokan yang disebabkan oleh mod terpasang."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Perbaiki wujud?"
|
||||
@@ -411,16 +417,16 @@
|
||||
"message": "Lepas kaitan wujud"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Bila Anda melanjutkan, Anda tidak akan dapat mengaitkannya lagi tanpa membuat wujud baru. Anda tidak akan mendapatkan pembaruan paket modifikasi dan menjadi wujud normal."
|
||||
"message": "Bila Anda melanjutkan, Anda tidak akan dapat mengaitkannya lagi tanpa membuat wujud baru. Anda tidak akan mendapatkan pembaruan paket mod dan menjadi wujud normal."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Apakah Anda yakin ingin melepas kaitan wujud ini?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Wujud ini berkaitan dengan paket modifikasi, yang berarti modifikasi tidak dapat diperbarui dan Anda tidak dapat mengubah versi peluncur modifikasi atau Minecraft. Melepas kaitan akan memutuskan wujud ini dari paket modifikasi secara permanen."
|
||||
"message": "Wujud ini berkaitan dengan paket mod, yang berarti mod tidak dapat diperbarui dan Anda tidak dapat mengubah versi peluncur mod atau Minecraft. Melepas kaitan akan memutuskan wujud ini dari paket mod secara permanen."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Lepas kaitan dari paket modifikasi"
|
||||
"message": "Lepas kaitan dari paket mod"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java dan memori"
|
||||
@@ -470,14 +476,11 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Masukkan lebar..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Pengaturan"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Peladen Minecraft"
|
||||
"message": "Server Minecraft"
|
||||
},
|
||||
"instance.worlds.cant_connect": {
|
||||
"message": "Tidak dapat menghubungkan ke peladen"
|
||||
"message": "Tidak dapat menghubungkan ke server"
|
||||
},
|
||||
"instance.worlds.copy_address": {
|
||||
"message": "Salin alamat"
|
||||
@@ -495,13 +498,13 @@
|
||||
"message": "Mode Menantang"
|
||||
},
|
||||
"instance.worlds.incompatible_server": {
|
||||
"message": "Peladen tidak cocok"
|
||||
"message": "Server tidak cocok"
|
||||
},
|
||||
"instance.worlds.no_contact": {
|
||||
"message": "Peladen tidak dapat dihubungi"
|
||||
"message": "Server tidak dapat dihubungi"
|
||||
},
|
||||
"instance.worlds.no_server_quick_play": {
|
||||
"message": "Anda hanya dapat memasuki peladen secara langsung pada Minecraft versi Alpha 1.0.5 ke atas"
|
||||
"message": "Anda hanya dapat memasuki server secara langsung pada Minecraft versi Alpha 1.0.5 ke atas"
|
||||
},
|
||||
"instance.worlds.no_singleplayer_quick_play": {
|
||||
"message": "Anda hanya dapat memasuki dunia bermain sendiri secara langsung pada Minecraft versi Alpha 1.20 ke atas"
|
||||
@@ -510,7 +513,7 @@
|
||||
"message": "Mainkan wujud"
|
||||
},
|
||||
"instance.worlds.type.server": {
|
||||
"message": "Peladen"
|
||||
"message": "Server"
|
||||
},
|
||||
"instance.worlds.type.singleplayer": {
|
||||
"message": "Bermain sendiri"
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
"message": "Aspetto"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Opzioni istanza predefinite"
|
||||
"message": "Opzioni d'istanza predefinite"
|
||||
},
|
||||
"app.settings.tabs.feature-flags": {
|
||||
"message": "Flag delle funzionalità"
|
||||
"message": "Flag di funzionalità"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Installazioni Java"
|
||||
@@ -30,23 +30,29 @@
|
||||
"message": "Privacy"
|
||||
},
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "Gestione risorse"
|
||||
"message": "Gestione delle risorse"
|
||||
},
|
||||
"app.update-toast.body": {
|
||||
"message": "Modrinth App v{version} è pronta per essere installata! Ricarica per aggiornare ora, o avverrà in automatico alla chiusura di Modrinth App."
|
||||
"message": "Modrinth App v{version} è pronta per essere installata! Ricarica per aggiornare ora, o avverrà in automatico alla chiusura dell'app."
|
||||
},
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Modrinth App v{version} è stata scaricata. Ricarica per aggiornare ora, o avverrà in automatico alla chiusura di Modrinth App."
|
||||
"message": "Modrinth App v{version} è stata scaricata. Ricarica per aggiornare ora, o avverrà in automatico alla chiusura dell'app."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Modrinth App v{version} è disponibile. Usa il tuo gestore di pacchetti per aggiornare e ricevere le novità più recenti!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Modrinth App v{version} è ora disponibile! Poiché sei su una rete a consumo, non l''abbiamo scaricata automaticamente."
|
||||
},
|
||||
"app.update-toast.changelog": {
|
||||
"message": "Changelog"
|
||||
"message": "Novità"
|
||||
},
|
||||
"app.update-toast.download": {
|
||||
"message": "Scarica ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Scarica"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Scaricando..."
|
||||
},
|
||||
@@ -60,7 +66,7 @@
|
||||
"message": "Download completato"
|
||||
},
|
||||
"app.update.complete-toast.text": {
|
||||
"message": "Clicca qui per leggere il changelog."
|
||||
"message": "Consulta qui le ultime novità in inglese."
|
||||
},
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "La versione {version} è stata installata con successo!"
|
||||
@@ -470,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Inserisci larghezza..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Impostazioni"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Un server Minecraft"
|
||||
},
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"message": "v{version}をダウンロード中"
|
||||
},
|
||||
"app.settings.tabs.appearance": {
|
||||
"message": "外観"
|
||||
"message": "表示設定"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "インスタンスの基本設定"
|
||||
@@ -21,25 +21,25 @@
|
||||
"message": "機能設定"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Javaのインストール"
|
||||
"message": "Javaのインストール設定"
|
||||
},
|
||||
"app.settings.tabs.language": {
|
||||
"message": "言語"
|
||||
},
|
||||
"app.settings.tabs.privacy": {
|
||||
"message": "プライバシー"
|
||||
"message": "プライバシー設定"
|
||||
},
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "リソース管理"
|
||||
},
|
||||
"app.update-toast.body": {
|
||||
"message": "Modrinth App v{version}は今すぐインストールできます!再起動して今すぐ更新するか、アプリを閉じた際に自動で更新されます。"
|
||||
"message": "Modrinth App v{version}のインストールの準備ができました。再起動して今すぐ更新するか、アプリを閉じた際に自動で更新されます。"
|
||||
},
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Modrinth App v{version}のダウンロードが完了しました。再起動して今すぐ更新するか、アプリを閉じた際に自動で更新されます。"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Modrinth App v{version}は今すぐダウンロードできます!従量課金制ネットワークを使用しているため自動でダウンロードはされていません。"
|
||||
"message": "Modrinth App v{version}は今すぐダウンロードできます。従量課金制ネットワークを使用しているため自動ダウンロードはされていません。"
|
||||
},
|
||||
"app.update-toast.changelog": {
|
||||
"message": "更新履歴"
|
||||
@@ -54,7 +54,7 @@
|
||||
"message": "再起動"
|
||||
},
|
||||
"app.update-toast.title": {
|
||||
"message": "アップデートが可能"
|
||||
"message": "アップデートが利用可能です"
|
||||
},
|
||||
"app.update-toast.title.download-complete": {
|
||||
"message": "ダウンロード完了"
|
||||
@@ -63,7 +63,7 @@
|
||||
"message": "クリックすると更新履歴を表示できます。"
|
||||
},
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "バージョン {version} のインストールが正常に完了しました!"
|
||||
"message": "バージョン {version} が正常にインストールされました!"
|
||||
},
|
||||
"app.update.download-update": {
|
||||
"message": "アップデートをダウンロード"
|
||||
@@ -93,7 +93,7 @@
|
||||
"message": "Modrinthユーザーネームを入力..."
|
||||
},
|
||||
"friends.add-friend.username.title": {
|
||||
"message": "あなたのフレンドのModrinthユーザーネームは何ですか?"
|
||||
"message": "あなたのフレンドのModrinthユーザー名は何ですか?"
|
||||
},
|
||||
"friends.add-friends-to-share": {
|
||||
"message": "<link>友達を追加</link>して、彼らが何をしているか見てみよう!"
|
||||
@@ -470,9 +470,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "幅を入力…"
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "設定"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Minecraftサーバー"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"app.auth-servers.unreachable.body": {
|
||||
"message": "Minecraft 인증 서버가 현재 다운되었을 수 있습니다. 인터넷 연결을 확인한 후 나중에 다시 시도하세요."
|
||||
"message": "Minecraft 인증 서버가 일시적으로 중단되었을 수 있습니다. 인터넷 연결을 확인한 후 나중에 다시 시도하세요."
|
||||
},
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "인증 서버에 연결할 수 없습니다"
|
||||
@@ -15,7 +15,7 @@
|
||||
"message": "모양"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "인스턴스 기본 옵션"
|
||||
"message": "기본 인스턴스 옵션"
|
||||
},
|
||||
"app.settings.tabs.feature-flags": {
|
||||
"message": "기능 플래그"
|
||||
@@ -27,19 +27,22 @@
|
||||
"message": "언어"
|
||||
},
|
||||
"app.settings.tabs.privacy": {
|
||||
"message": "개인정보 보호"
|
||||
"message": "개인정보"
|
||||
},
|
||||
"app.settings.tabs.resource-management": {
|
||||
"message": "리소스 관리"
|
||||
},
|
||||
"app.update-toast.body": {
|
||||
"message": "Modrinth App v{version}을 설치할 준비가 완료되었습니다! 새로고침하거나 Modrinth App을 종료하면 자동으로 업데이트합니다."
|
||||
"message": "Modrinth App v{version}을 설치할 준비가 완료되었습니다! 새로고침하거나 Modrinth App을 종료하면 자동으로 업데이트됩니다."
|
||||
},
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Modrinth App v{version} 다운로드가 완료되었습니다. 새로고침하거나 Modrinth App을 종료하면 자동으로 업데이트합니다."
|
||||
"message": "Modrinth App v{version} 다운로드가 완료되었습니다. 새로고침하거나 Modrinth App을 종료하면 자동으로 업데이트됩니다."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Modrinth App v{version} 버전을 사용할 수 있습니다. 최신 기능과 오류 수정을 적용하려면 패키지 관리자를 통해 업데이트하세요!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Modrinth App v{version}이 지금 이용 가능합니다! 종량제 네트워크에 있기 때문에, 자동으로 다운로드하지 않았습니다."
|
||||
"message": "Modrinth App v{version}을 지금 사용할 수 있습니다! 데이터 통신 연결을 사용 중이므로, 자동으로 다운로드하지 않았습니다."
|
||||
},
|
||||
"app.update-toast.changelog": {
|
||||
"message": "변경 내역"
|
||||
@@ -78,7 +81,7 @@
|
||||
"message": "친구 추가"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} 친구 요청 {count, plural, one {건의} other {건의}}"
|
||||
"message": "{count} 친구 요청 {count, plural, one {요청} other {요청}}"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "친구 요청 보내기"
|
||||
@@ -87,7 +90,7 @@
|
||||
"message": "친구 추가 중"
|
||||
},
|
||||
"friends.add-friend.username.description": {
|
||||
"message": "마인크래프트 사용자명과 다를 수 있습니다!"
|
||||
"message": "Minecraft 사용자명과 다를 수 있습니다!"
|
||||
},
|
||||
"friends.add-friend.username.placeholder": {
|
||||
"message": "Modrinth 사용자명 입력..."
|
||||
@@ -135,7 +138,7 @@
|
||||
"message": "{title} - {count}"
|
||||
},
|
||||
"friends.sign-in-to-add-friends": {
|
||||
"message": "친구를 추가하고 무엇을 하는지 보려면 <link>Modrinth 계정에 로그인</link>하세요!"
|
||||
"message": "<link>Modrinth 계정으로 로그인</link>하여 친구를 추가하고 무엇을 플레이 중인지 확인하세요!"
|
||||
},
|
||||
"instance.add-server.add-and-play": {
|
||||
"message": "추가 후 플레이"
|
||||
@@ -201,22 +204,22 @@
|
||||
"message": "인스턴스 삭제"
|
||||
},
|
||||
"instance.settings.tabs.general.delete.description": {
|
||||
"message": "기기에서 인스턴스를 완전히 삭제합니다. 월드, 설정, 설치된 모든 콘텐츠가 함께 제거됩니다. 주의하세요, 한 번 삭제하면 인스턴스를 복구할 방법은 없습니다."
|
||||
"message": "기기에서 인스턴스를 완전히 삭제합니다. 세계, 설정, 설치된 모든 콘텐츠가 함께 삭제됩니다. 주의하세요, 한 번 삭제하면 인스턴스를 복구할 수 없습니다."
|
||||
},
|
||||
"instance.settings.tabs.general.deleting.button": {
|
||||
"message": "삭제중..."
|
||||
"message": "삭제 중..."
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-button": {
|
||||
"message": "복제"
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-button.tooltip.installing": {
|
||||
"message": "설치중에는 복제할 수 없습니다."
|
||||
"message": "설치 중에는 복제할 수 없습니다."
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-instance": {
|
||||
"message": "인스턴스 복제"
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-instance.description": {
|
||||
"message": "인스턴스의 복사본을 생성합니다. 월드, 설정, 모드, 기타 등등도 함께 복사됩니다."
|
||||
"message": "인스턴스의 복사본을 생성합니다. 세계, 설정, 모드, 기타 등등도 함께 복사됩니다."
|
||||
},
|
||||
"instance.settings.tabs.general.edit-icon": {
|
||||
"message": "아이콘 수정"
|
||||
@@ -237,7 +240,7 @@
|
||||
"message": "새 그룹 만들기"
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups.description": {
|
||||
"message": "라이브러리 그룹을 사용하면 라이브러리 내에서 인스턴스를 서로 다른 섹션으로 구성할 수 있습니다."
|
||||
"message": "라이브러리 그룹을 사용하면 인스턴스를 라이브러리 내 여러 섹션으로 나눠서 정리할 수 있습니다."
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups.enter-name": {
|
||||
"message": "그룹 이름 입력"
|
||||
@@ -252,7 +255,7 @@
|
||||
"message": "사용자 지정 실행 후크"
|
||||
},
|
||||
"instance.settings.tabs.hooks.description": {
|
||||
"message": "후크 기능을 사용하면 고급 사용자가 게임을 실행하기 전후에 특정 시스템 명령을 실행할 수 있습니다."
|
||||
"message": "후크 기능을 사용하면 고급 사용자가 게임 실행 전후에 특정 시스템 명령을 실행할 수 있습니다."
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit": {
|
||||
"message": "종료 후"
|
||||
@@ -279,7 +282,7 @@
|
||||
"message": "래퍼"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper.description": {
|
||||
"message": "Minecraft를 실행을 위한 래퍼 명령어 입니다."
|
||||
"message": "Minecraft 실행을 위한 래퍼 명령어 입니다."
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper.enter": {
|
||||
"message": "래퍼 명령어 입력..."
|
||||
@@ -339,7 +342,7 @@
|
||||
"message": "{loader}(은)는 Minecraft {version}에서 사용할 수 없습니다. 다른 모드 로더를 사용하세요."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "이 인스턴스가 모드팩에 연결되어 있지만, 모드팩을 Modrinth에서 찾을 수 없습니다."
|
||||
"message": "이 인스턴스는 모드팩과 연결되어 있지만, Modrinth에서 모드팩을 찾을 수 없습니다."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "플랫폼"
|
||||
@@ -351,7 +354,7 @@
|
||||
"message": "모드팩 재설치 중"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "재설치하면 설치 또는 수정된 모든 콘텐츠가 모드팩에서 제공하는 콘텐츠로 초기화되며, 기존 팩에 추가한 모드나 콘텐츠는 모두 제거됩니다. 인스턴스에 변경 사항이 있는 경우 예상치 못한 동작은 해결할 수 있지만, 현재 월드가 추가로 설치된 콘텐츠에 의존하고 있다면 기존 월드가 손상될 수 있습니다."
|
||||
"message": "재설치하면 설치 또는 수정된 모든 콘텐츠가 모드팩에서 제공하는 콘텐츠로 초기화되며, 기존 팩에 추가한 모드나 콘텐츠는 모두 제거됩니다. 인스턴스에 변경 사항이 있는 경우 예상치 못한 동작은 해결할 수 있지만, 현재 세계가 추가로 설치된 콘텐츠에 의존하고 있다면 기존 세계가 손상될 수 있습니다."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "정말로 이 인스턴스를 다시 설치하시겠습니까?"
|
||||
@@ -470,9 +473,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "너비 입력..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "설정"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Minecraft 서버"
|
||||
},
|
||||
@@ -501,10 +501,10 @@
|
||||
"message": "서버가 응답하지 않음"
|
||||
},
|
||||
"instance.worlds.no_server_quick_play": {
|
||||
"message": "Minecraft 알파 1.0.5 이후 버전에서만 서버에 바로 진입할 수 있습니다."
|
||||
"message": "Minecraft 알파 1.0.5 이후 버전에서만 서버에 바로 진입할 수 있습니다"
|
||||
},
|
||||
"instance.worlds.no_singleplayer_quick_play": {
|
||||
"message": "Minecraft 1.20 이후 버전에서만 싱글플레이 세계로 바로 진입할 수 있습니다."
|
||||
"message": "Minecraft 1.20 이후 버전에서만 싱글플레이 세계로 바로 진입할 수 있습니다"
|
||||
},
|
||||
"instance.worlds.play_instance": {
|
||||
"message": "인스턴스 플레이"
|
||||
@@ -519,7 +519,7 @@
|
||||
"message": "인스턴스 보기"
|
||||
},
|
||||
"instance.worlds.world_in_use": {
|
||||
"message": "사용중인 월드"
|
||||
"message": "사용 중인 세계"
|
||||
},
|
||||
"search.filter.locked.instance": {
|
||||
"message": "인스턴스에서 관리"
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Modrinth App v{version} sudah selesai dipasang! Muat semula untuk kemas kini sekarang, atau kemas kini secara automatik apabila anda menutup Modrinth App."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Modrinth App v{version} tersedia. Gunakan pengurus pakej anda untuk mengemas kini dan mendapatkan ciri-ciri dan pembetulan terkini!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Modrinth App v{version} kini tersedia! Memandangkan anda sedang menggunakan rangkaian bermeter, kami tidak memuat turunnya secara automatik."
|
||||
},
|
||||
@@ -47,6 +50,9 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "Muat turun ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Muat turun"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Sedang memuat turun..."
|
||||
},
|
||||
@@ -470,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Masukkan lebar..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Tetapan"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Pelayan Minecraft"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"app.auth-servers.unreachable.body": {
|
||||
"message": "Minecraft verificatie servers zijn misschien offline. Check je internetverbinding en probeer opnieuw later."
|
||||
"message": "Minecraft verificatie servers zijn mogelijk offline. Check je internetverbinding en probeer opnieuw later."
|
||||
},
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Authenticatieservers kunnen niet worden bereikt"
|
||||
@@ -42,7 +42,7 @@
|
||||
"message": "Modrinth App v{version} is nu beschikbaar! Omdat je nu op een netwerk met datalimiet zit, is de download niet automatisch gestart."
|
||||
},
|
||||
"app.update-toast.changelog": {
|
||||
"message": "Changelog"
|
||||
"message": "Wijzigingenlogboek"
|
||||
},
|
||||
"app.update-toast.download": {
|
||||
"message": "Download ({size})"
|
||||
@@ -60,7 +60,7 @@
|
||||
"message": "Downloaden voltooid"
|
||||
},
|
||||
"app.update.complete-toast.text": {
|
||||
"message": "Klik hier om de changelog te bekijken."
|
||||
"message": "Klik hier om het wijzigingenlogboek te bekijken."
|
||||
},
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "Versie {version} is succesvol geïnstalleerd!"
|
||||
@@ -201,7 +201,7 @@
|
||||
"message": "Verwijder instantie"
|
||||
},
|
||||
"instance.settings.tabs.general.delete.description": {
|
||||
"message": "Verwijdert permanent een instantie van je apparaat, inclusief je werelden, instellingen en alle geïnstalleerde inhoud. Wees voorzichtig, want zodra je een instantie verwijdert, is het niet meer mogelijk om deze te herstellen."
|
||||
"message": "Verwijdert permanent een instantie van je apparaat, inclusief je werelden, instellingen en alle geïnstalleerde inhoud. Wees voorzichtig, zodra je een instantie verwijdert, is het niet meer mogelijk om deze te herstellen."
|
||||
},
|
||||
"instance.settings.tabs.general.deleting.button": {
|
||||
"message": "Verwijderen..."
|
||||
@@ -470,9 +470,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Voer breedte in..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Instellingen"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Een Minecraft server"
|
||||
},
|
||||
|
||||
@@ -470,9 +470,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Angi bredde..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Instillinger"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "En Minecraft server"
|
||||
},
|
||||
|
||||
@@ -33,11 +33,14 @@
|
||||
"message": "Zarządzanie zasobami"
|
||||
},
|
||||
"app.update-toast.body": {
|
||||
"message": "Wersja Modrinth App v{version} jest gotowa do pobrania! Odśwież, żeby zaktualizować teraz, albo automatycznie, gdy zamkniesz Modrinth App."
|
||||
"message": "Wersja Modrinth App v{version} jest gotowa do zainstalowania! Odśwież, żeby zaktualizować teraz, albo automatycznie, gdy zamkniesz Modrinth App."
|
||||
},
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Wersja Modrinth App v{version} została pobrana. Odśwież, żeby zaktualizować teraz, albo automatycznie, gdy zamkniesz Modrinth App."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Modrinth App v{version} jest dostępna. Użyj menedżera pakietów, aby zaktualizować i uzyskać najnowsze funkcje i poprawki!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Wersja v{version} Modrinth App jest dostępna! Skoro korzystasz z sieci taryfowej, nie pobraliśmy jej automatycznie."
|
||||
},
|
||||
@@ -47,6 +50,9 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "Pobierz ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Pobierz"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Pobieranie..."
|
||||
},
|
||||
@@ -470,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Wprowadź szerokość..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Ustawienia"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Serwer Minecraft"
|
||||
},
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "O Modrinth App v{version} baixado. Recarregue para atualizar agora ou a atualização será aplicada automaticamente ao fechar o Modrinth App."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "O Modrinth App v{version} está disponível. Use seu gerenciador de pacotes para atualizar e obter os recursos e correções mais recentes!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "O Modrinth App v{version} já está disponível! Como você está em uma rede limitada, não o baixamos automaticamente."
|
||||
},
|
||||
@@ -47,6 +50,9 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "Baixar ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Baixar"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Baixando..."
|
||||
},
|
||||
@@ -470,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Insira a largura..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Configurações"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Servidor de Minecraft"
|
||||
},
|
||||
|
||||
@@ -252,7 +252,7 @@
|
||||
"message": "Ganchos de inicio personalizados"
|
||||
},
|
||||
"instance.settings.tabs.hooks.description": {
|
||||
"message": "Ganchos permitem a utilizadores avançados executarem certos comandos de sistema antes e depois de abrir o jogo."
|
||||
"message": "Ganchos permitem a utilizadores avançados executarem certos comandos de sistema antes e após abrir o jogo."
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit": {
|
||||
"message": "Pós-saída"
|
||||
@@ -384,7 +384,7 @@
|
||||
"message": "Mostrar todas as versões"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "alterar versão"
|
||||
"message": "Alterar versão"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.install": {
|
||||
"message": "instalar"
|
||||
@@ -470,9 +470,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Inserir largura..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Definições"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Um Servidor de Minecraft"
|
||||
},
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
{
|
||||
"app.auth-servers.unreachable.body": {
|
||||
"message": "Serverele de autentificare Minecraft pot fi indisponibile în acest moment. Verificați conexiunea la internet și încercați din nou mai târziu."
|
||||
},
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Nu se pot accesa serverele de autentificare"
|
||||
},
|
||||
"app.settings.developer-mode-enabled": {
|
||||
"message": "Modul dezvoltator activat."
|
||||
},
|
||||
@@ -17,6 +23,9 @@
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Instalări Java"
|
||||
},
|
||||
"app.settings.tabs.language": {
|
||||
"message": "Limbă"
|
||||
},
|
||||
"app.settings.tabs.privacy": {
|
||||
"message": "Confidențialitate"
|
||||
},
|
||||
@@ -65,6 +74,63 @@
|
||||
"app.update.reload-to-update": {
|
||||
"message": "Reîncarcă pentru a instala actualizarea"
|
||||
},
|
||||
"friends.action.add-friend": {
|
||||
"message": "Adaugă un prieten"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Trimite cerere de prietenie"
|
||||
},
|
||||
"friends.add-friend.title": {
|
||||
"message": "Adăugarea unui prieten"
|
||||
},
|
||||
"friends.add-friend.username.description": {
|
||||
"message": "Poate fi diferit de numele lor de utilizator Minecraft!"
|
||||
},
|
||||
"friends.add-friend.username.placeholder": {
|
||||
"message": "Introduceți numele de utilizator Modrinth..."
|
||||
},
|
||||
"friends.add-friend.username.title": {
|
||||
"message": "Care este numele de utilizator Modrinth al prietenului tău?"
|
||||
},
|
||||
"friends.add-friends-to-share": {
|
||||
"message": "<link>Adaugă prieteni</link> pentru a vedea ce joacă!"
|
||||
},
|
||||
"friends.friend.cancel-request": {
|
||||
"message": "Anulează cererea"
|
||||
},
|
||||
"friends.friend.remove-friend": {
|
||||
"message": "Eliminare prieten"
|
||||
},
|
||||
"friends.friend.request-sent": {
|
||||
"message": "Cerere de prietenie trimisă"
|
||||
},
|
||||
"friends.friend.view-profile": {
|
||||
"message": "Vizualizați profilul"
|
||||
},
|
||||
"friends.heading": {
|
||||
"message": "Prieteni"
|
||||
},
|
||||
"friends.heading.active": {
|
||||
"message": "Activ"
|
||||
},
|
||||
"friends.heading.offline": {
|
||||
"message": "Inactiv"
|
||||
},
|
||||
"friends.heading.online": {
|
||||
"message": "Online"
|
||||
},
|
||||
"friends.heading.pending": {
|
||||
"message": "În așteptare"
|
||||
},
|
||||
"friends.no-friends-match": {
|
||||
"message": "Nu există prieteni care să corespundă cu \"{query}”"
|
||||
},
|
||||
"friends.search-friends-placeholder": {
|
||||
"message": "Caută prieteni..."
|
||||
},
|
||||
"friends.sign-in-to-add-friends": {
|
||||
"message": "<link>Conectează-te la un cont Modrinth</link> pentru a adăuga prieteni și a vedea ce joacă!"
|
||||
},
|
||||
"instance.add-server.add-and-play": {
|
||||
"message": "Adaugă și joacă"
|
||||
},
|
||||
@@ -398,9 +464,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Introdu lățimea..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Setări"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Un server de Minecraft"
|
||||
},
|
||||
@@ -432,10 +495,10 @@
|
||||
"message": "Poți să intri direct pe servere doar pe Minecraft Alpha 1.0.5+"
|
||||
},
|
||||
"instance.worlds.no_singleplayer_quick_play": {
|
||||
"message": "Poți să intri direct în lumile singleplayer numai pe Minecraft 1.20+"
|
||||
"message": "Poți să intri direct în lumile de jucător simplu numai pe Minecraft 1.20+"
|
||||
},
|
||||
"instance.worlds.play_instance": {
|
||||
"message": "Joacă instanța"
|
||||
"message": "Joacă pe instanța"
|
||||
},
|
||||
"instance.worlds.type.server": {
|
||||
"message": "Server"
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Скачивание версии Modrinth App {version} завершено. Перезапустите приложение, чтобы обновить его, или оно обновится автоматически после закрытия."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Modrinth App v{version} доступен. Обновите приложение, с помощью менеджера пакетов, для получения последних исправлений и улучшений!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Версия Modrinth App {version} доступна для скачивания! Используется сеть с лимитным тарифным планом, поэтому скачивание не началось автоматически."
|
||||
},
|
||||
@@ -47,6 +50,9 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "Скачать ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Скачать"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Скачивание..."
|
||||
},
|
||||
@@ -90,7 +96,7 @@
|
||||
"message": "Оно может быть не таким, как в Minecraft!"
|
||||
},
|
||||
"friends.add-friend.username.placeholder": {
|
||||
"message": "Введите имя на Modrinth..."
|
||||
"message": "Введите имя с Modrinth..."
|
||||
},
|
||||
"friends.add-friend.username.title": {
|
||||
"message": "Какое имя у друга на Modrinth?"
|
||||
@@ -114,7 +120,7 @@
|
||||
"message": "Друзья"
|
||||
},
|
||||
"friends.heading.active": {
|
||||
"message": "Активно"
|
||||
"message": "В игре"
|
||||
},
|
||||
"friends.heading.offline": {
|
||||
"message": "Не в сети"
|
||||
@@ -123,7 +129,7 @@
|
||||
"message": "В сети"
|
||||
},
|
||||
"friends.heading.pending": {
|
||||
"message": "В ожидании"
|
||||
"message": "В ожидании"
|
||||
},
|
||||
"friends.no-friends-match": {
|
||||
"message": "Нет друзей по запросу «{query}»"
|
||||
@@ -219,16 +225,16 @@
|
||||
"message": "Создаёт копию сборки, включая миры, настройки, моды и т. д."
|
||||
},
|
||||
"instance.settings.tabs.general.edit-icon": {
|
||||
"message": "Изменить значок"
|
||||
"message": "Изменить иконку"
|
||||
},
|
||||
"instance.settings.tabs.general.edit-icon.remove": {
|
||||
"message": "Удалить значок"
|
||||
"message": "Удалить иконку"
|
||||
},
|
||||
"instance.settings.tabs.general.edit-icon.replace": {
|
||||
"message": "Заменить значок"
|
||||
"message": "Заменить иконку"
|
||||
},
|
||||
"instance.settings.tabs.general.edit-icon.select": {
|
||||
"message": "Выбрать значок"
|
||||
"message": "Выбрать иконку"
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups": {
|
||||
"message": "Группировка"
|
||||
@@ -249,19 +255,19 @@
|
||||
"message": "Команды запуска"
|
||||
},
|
||||
"instance.settings.tabs.hooks.custom-hooks": {
|
||||
"message": "Изменение команд запуска"
|
||||
"message": "Переопределение команд запуска"
|
||||
},
|
||||
"instance.settings.tabs.hooks.description": {
|
||||
"message": "Позволяет опытным пользователям задать системные команды, выполняемые до и после запуска игры."
|
||||
"message": "Позволяет опытным пользователям задать системные команды, выполняемые до и после запуска игры."
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit": {
|
||||
"message": "После выхода"
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit.description": {
|
||||
"message": "Выполняется после выхода из игры."
|
||||
"message": "Выполняется после выхода из игры."
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit.enter": {
|
||||
"message": "Команда после закрытия..."
|
||||
"message": "Введите команду после выхода..."
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch": {
|
||||
"message": "Перед запуском"
|
||||
@@ -444,7 +450,7 @@
|
||||
"message": "Окно"
|
||||
},
|
||||
"instance.settings.tabs.window.custom-window-settings": {
|
||||
"message": "Изменение настроек окна"
|
||||
"message": "Переопределение настроек окна"
|
||||
},
|
||||
"instance.settings.tabs.window.fullscreen": {
|
||||
"message": "Полноэкранный режим"
|
||||
@@ -470,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Введите ширину..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Настройки"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Сервер Minecraft"
|
||||
},
|
||||
@@ -498,7 +501,7 @@
|
||||
"message": "Сервер несовместим"
|
||||
},
|
||||
"instance.worlds.no_contact": {
|
||||
"message": "Не удалось связаться с сервером"
|
||||
"message": "Не удалось связаться с сервером"
|
||||
},
|
||||
"instance.worlds.no_server_quick_play": {
|
||||
"message": "Подключаться к серверам напрямую можно только в Minecraft Alpha 1.0.5 и выше"
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
"message": "Funktionsflaggor"
|
||||
},
|
||||
"app.settings.tabs.java-installations": {
|
||||
"message": "Java installationer"
|
||||
"message": "Java-installationer"
|
||||
},
|
||||
"app.settings.tabs.language": {
|
||||
"message": "Språk"
|
||||
@@ -38,6 +38,9 @@
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Modrinth App v{version} har laddats ner. Ladda om för att uppdatera nu, eller automatiskt när du stänger Modrinth App."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Modrinth App v{version} är tillgänglig. Använd din pakethanterare för att uppdatera och få tillgång till de senaste funktionerna och buggfixarna!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Modrinth App v{version} är nu tillgänglig! Eftersom du använder ett nätverk med datatrafikbegränsningar har vi inte laddat ner det automatiskt."
|
||||
},
|
||||
@@ -47,6 +50,9 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "Ladda ner ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Ladda ner"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Laddar ner..."
|
||||
},
|
||||
@@ -303,7 +309,7 @@
|
||||
"message": "Installerar"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.cannot-while-fetching": {
|
||||
"message": "Hämtar modpack versioner"
|
||||
"message": "Hämtar modpack-versioner"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.in-progress": {
|
||||
"message": "Installerar ny version"
|
||||
@@ -315,10 +321,10 @@
|
||||
"message": "Felsökningsinformation:"
|
||||
},
|
||||
"instance.settings.tabs.installation.fetching-modpack-details": {
|
||||
"message": "Hämtar modpack detaljer"
|
||||
"message": "Hämtar modpack-detaljer"
|
||||
},
|
||||
"instance.settings.tabs.installation.game-version": {
|
||||
"message": "Spel version"
|
||||
"message": "Spelversion"
|
||||
},
|
||||
"instance.settings.tabs.installation.install": {
|
||||
"message": "Installera"
|
||||
@@ -333,10 +339,10 @@
|
||||
"message": "Minecraft {version}"
|
||||
},
|
||||
"instance.settings.tabs.installation.no-connection": {
|
||||
"message": "Kan inte hämta länkade modpack detaljer. Vänligen kolla din internetanslutning."
|
||||
"message": "Kan inte hämta länkade modpack-detaljer. Vänligen kontrollera din internetanslutning."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-loader-versions": {
|
||||
"message": "{loader} är inte tillgänglig för Minecraft {version}. Prova en annan mod laddare."
|
||||
"message": "{loader} är inte tillgänglig för Minecraft {version}. Prova en annan modloader."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Denna instans är länkad till ett modpack, men modpacket kunde inte hittas på Modrinth."
|
||||
@@ -351,7 +357,7 @@
|
||||
"message": "Ominstallerar modpack"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Ominstallation kommer att återställa allt installerat eller modifierat innehåll till det som tillhandahålls av modpacket, och ta bort eventuella mods eller innehåll som du har lagt till ovanpå den ursprungliga installationen. Detta kan åtgärda oväntat beteende om ändringar har gjorts i instansen, men om dina världar nu är beroende av ytterligare installerat innehåll kan det skada befintliga världar."
|
||||
"message": "Ominstallation kommer att återställa allt installerat eller modifierat innehåll till det som tillhandahålls av modpacket och ta bort eventuella mods eller innehåll som du har lagt till ovanpå den ursprungliga installationen. Detta kan åtgärda oväntat beteende om ändringar har gjorts i instansen, men om dina världar nu är beroende av ytterligare installerat innehåll kan det skada befintliga världar."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Är du säker att du vill ominstallera denna instans?"
|
||||
@@ -417,7 +423,7 @@
|
||||
"message": "Är du säker att du vill ta bort koppling till denna instans?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Denna instans är kopplad till ett modpack, vilket menas att mods kan inte bli uppdaterade och du kan inte ändra mod-loader eller Minecraft version. Att ta bort kopplingen kommer permanent att koppla bort denna instans från modpacket."
|
||||
"message": "Denna instans är kopplad till ett modpack, vilket innebär att mods inte kan uppdateras och mod-loader eller Minecraft version inte kan ändras. Att ta bort kopplingen kommer permanent att koppla bort denna instans från modpacket."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Ta bort koppling från modpack"
|
||||
@@ -429,13 +435,13 @@
|
||||
"message": "Miljövariabler"
|
||||
},
|
||||
"instance.settings.tabs.java.hooks": {
|
||||
"message": "Krokar"
|
||||
"message": "Hooks"
|
||||
},
|
||||
"instance.settings.tabs.java.java-arguments": {
|
||||
"message": "Java argument"
|
||||
"message": "Java-argument"
|
||||
},
|
||||
"instance.settings.tabs.java.java-installation": {
|
||||
"message": "Java installation"
|
||||
"message": "Java-installation"
|
||||
},
|
||||
"instance.settings.tabs.java.java-memory": {
|
||||
"message": "Tilldelat minne"
|
||||
@@ -444,7 +450,7 @@
|
||||
"message": "Fönster"
|
||||
},
|
||||
"instance.settings.tabs.window.custom-window-settings": {
|
||||
"message": "Egendefinierade fönsterinställningar"
|
||||
"message": "Anpassade fönsterinställningar"
|
||||
},
|
||||
"instance.settings.tabs.window.fullscreen": {
|
||||
"message": "Helskärm"
|
||||
@@ -470,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Ange bredd..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Inställningar"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "En Minecraft Server"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"app.auth-servers.unreachable.body": {
|
||||
"message": "Minecraft doğrulama sunucuları çökmüş olabilir. İnternet bağlantını kontrol et ve daha sonra tekrar dene."
|
||||
"message": "Minecraft doğrulama sunucuları kapalı olabilir. İnternet bağlantını kontrol et ve daha sonra tekrar dene."
|
||||
},
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Doğrulama sunucularına erişilemedi"
|
||||
@@ -33,7 +33,7 @@
|
||||
"message": "Kaynak yönetimi"
|
||||
},
|
||||
"app.update-toast.body": {
|
||||
"message": "Modrinth App v{version} kurulmaya hazır! Şimdi güncellemek için uygulamayı yeniden yükle ya da sen Modrinth App'i kapatınca otomatik olarak güncellensin."
|
||||
"message": "Modrinth App v{version} kuruluma hazır! Şimdi güncellemek için uygulamayı yeniden yükle ya da sen Modrinth App'i kapatınca otomatik olarak güncellensin."
|
||||
},
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Modrinth App v{version} indirildi. Şimdi güncellemek için uygulamayı yeniden yükle ya da Modrinth App'i kapatınca otomatik olarak güncellensin."
|
||||
@@ -60,7 +60,7 @@
|
||||
"message": "Yükleme tamamlandı"
|
||||
},
|
||||
"app.update.complete-toast.text": {
|
||||
"message": "Değişiklikleri görüntülemek için buraya tıklayın."
|
||||
"message": "Değişiklik günlüğünü görüntülemek için buraya tıklayın."
|
||||
},
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "{version} sürümü başarıyla kuruldu!"
|
||||
@@ -84,10 +84,10 @@
|
||||
"message": "Arkadaşlık isteği gönder"
|
||||
},
|
||||
"friends.add-friend.title": {
|
||||
"message": "Bir arkadaş ekleme"
|
||||
"message": "Arkadaş ekleme"
|
||||
},
|
||||
"friends.add-friend.username.description": {
|
||||
"message": "Onun Minecraft kullanıcı adından farklı olabilir!"
|
||||
"message": "Minecraft kullanıcı adlarından farklı olabilir!"
|
||||
},
|
||||
"friends.add-friend.username.placeholder": {
|
||||
"message": "Modrinth kullanıcı adını girin..."
|
||||
@@ -135,7 +135,7 @@
|
||||
"message": "{title} - {count}"
|
||||
},
|
||||
"friends.sign-in-to-add-friends": {
|
||||
"message": "<link>Modrinth hesabına giriş yaparak</link> arkadaş ekle ve ne oynadıklarını gör!"
|
||||
"message": "Arkadaş eklemek ve ne oynadıklarını görmek için bir <link>Modrinth hesabına giriş yap</link>!"
|
||||
},
|
||||
"instance.add-server.add-and-play": {
|
||||
"message": "Ekle ve oyna"
|
||||
@@ -144,10 +144,10 @@
|
||||
"message": "Sunucu ekle"
|
||||
},
|
||||
"instance.add-server.resource-pack.disabled": {
|
||||
"message": "Kapalı"
|
||||
"message": "Devre dışı"
|
||||
},
|
||||
"instance.add-server.resource-pack.enabled": {
|
||||
"message": "Açık"
|
||||
"message": "Etkin"
|
||||
},
|
||||
"instance.add-server.resource-pack.prompt": {
|
||||
"message": "Sor"
|
||||
@@ -159,7 +159,7 @@
|
||||
"message": "Sunucuyu düzenle"
|
||||
},
|
||||
"instance.edit-world.hide-from-home": {
|
||||
"message": "Ana Sayfadan gizle"
|
||||
"message": "Ana sayfada gizle"
|
||||
},
|
||||
"instance.edit-world.name": {
|
||||
"message": "Dünya Adı"
|
||||
@@ -246,13 +246,13 @@
|
||||
"message": "Ad"
|
||||
},
|
||||
"instance.settings.tabs.hooks": {
|
||||
"message": "Başlatma bağları"
|
||||
"message": "Başlatma kancaları"
|
||||
},
|
||||
"instance.settings.tabs.hooks.custom-hooks": {
|
||||
"message": "Özel başlantı bağları"
|
||||
"message": "Özel başlatma kancası"
|
||||
},
|
||||
"instance.settings.tabs.hooks.description": {
|
||||
"message": "Bağlar kullanıcılara oyunu başlatmadan önce veya başlattıktan sonra sistem komutları çalıştırmalarını sağlar."
|
||||
"message": "Kancalar gelişmiş kullanıcıların oyunu başlattıktan önce ve sonra belirli sistem komutları çalıştırmasını sağlar."
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit": {
|
||||
"message": "Çıkış-sonrası"
|
||||
@@ -408,7 +408,7 @@
|
||||
"message": "(bilinmeyen sürüm)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "Kurulum bağını koparr"
|
||||
"message": "Kurulum bağlantısını kes"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Devam edersen bu kurulumu geri bağlayamazsın. Mod paketi güncellemeleri almazsın ve bu kurulum normal kuruluma dönüşür."
|
||||
@@ -470,11 +470,8 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Genişlik gir..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Ayarlar"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Bir Minecraft Sunucusu"
|
||||
"message": "Minecraft Sunucusu"
|
||||
},
|
||||
"instance.worlds.cant_connect": {
|
||||
"message": "Sunucuya bağlanılamıyor"
|
||||
@@ -483,7 +480,7 @@
|
||||
"message": "Adresi kopyala"
|
||||
},
|
||||
"instance.worlds.dont_show_on_home": {
|
||||
"message": "Ana Sayfada gösterme"
|
||||
"message": "Ana sayfada gösterme"
|
||||
},
|
||||
"instance.worlds.filter.available": {
|
||||
"message": "Kullanılabilir"
|
||||
@@ -531,6 +528,6 @@
|
||||
"message": "Yükleyici veren kurulumlar"
|
||||
},
|
||||
"search.filter.locked.instance.sync": {
|
||||
"message": "Kurulum ile senkronize et"
|
||||
"message": "Kurulumla senkronize et"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"app.auth-servers.unreachable.body": {
|
||||
"message": "Сервери автентифікації Minecraft можливо зараз не працюють. Перевірте з’єднання з Інтернетом та спробуйте пізніше."
|
||||
"message": "Сервери автентифікації Minecraft можуть зараз не працювати. Перевірте з’єднання з інтернетом та спробуйте пізніше."
|
||||
},
|
||||
"app.auth-servers.unreachable.header": {
|
||||
"message": "Не вдається зв’язатися зі серверами автентифікації"
|
||||
@@ -15,7 +15,7 @@
|
||||
"message": "Вигляд"
|
||||
},
|
||||
"app.settings.tabs.default-instance-options": {
|
||||
"message": "Налаштування усталеного профілю"
|
||||
"message": "Усталені налашт. профілю"
|
||||
},
|
||||
"app.settings.tabs.feature-flags": {
|
||||
"message": "Спеціальні функції"
|
||||
@@ -33,13 +33,16 @@
|
||||
"message": "Керування ресурсами"
|
||||
},
|
||||
"app.update-toast.body": {
|
||||
"message": "Modrinth App v{version} готова до встановлення! Перезапустіть, щоб оновити зараз. Або, оновлення буде здійснено автоматично, коли закриєте Modrinth App."
|
||||
"message": "Modrinth App v{version} готовий до встановлення! Перезапустіть, щоб оновити зараз. Або, оновлення буде здійснено автоматично, коли закриєте Modrinth App."
|
||||
},
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Modrinth App v{version} уже завантажилась. Перезапустіть, щоб оновити зараз. Або, оновлення буде здійснено автоматично, коли закриєте Modrinth App."
|
||||
"message": "Modrinth App v{version} завантажено. Перезапустіть зараз, щоб оновити застосунок, або оновлення відбудеться автоматично після закриття Modrinth App."
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Доступна версія Modrinth App {version}. Скористайтеся вашим менеджером пакетів, щоб отримати найновіші функції та виправлення!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Modrinth App v{version} доступна зараз! Оскільки ви на лімітному з’єднанні, ми не завантажили її автоматично."
|
||||
"message": "Версія {version} Modrinth App доступна для завантаження! Оскільки ви на лімітному з’єднанні, ми не завантажили її автоматично."
|
||||
},
|
||||
"app.update-toast.changelog": {
|
||||
"message": "Журнал змін"
|
||||
@@ -47,6 +50,9 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "Завантажити ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "Завантажити"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "Завантаження…"
|
||||
},
|
||||
@@ -54,13 +60,13 @@
|
||||
"message": "Перезапустити"
|
||||
},
|
||||
"app.update-toast.title": {
|
||||
"message": "Оновлення доступне"
|
||||
"message": "Доступне оновлення"
|
||||
},
|
||||
"app.update-toast.title.download-complete": {
|
||||
"message": "Завантаження завершено"
|
||||
},
|
||||
"app.update.complete-toast.text": {
|
||||
"message": "Натисніть тут, щоб побачити список змін."
|
||||
"message": "Натисніть тут, щоб переглянути журнал змін."
|
||||
},
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "Версію {version} успішно встановлено!"
|
||||
@@ -72,7 +78,7 @@
|
||||
"message": "Завантаження оновлення ({percent}%)"
|
||||
},
|
||||
"app.update.reload-to-update": {
|
||||
"message": "Перезавантажте, щоб установити оновлення"
|
||||
"message": "Перезапустіть, аби встановити оновлення"
|
||||
},
|
||||
"friends.action.add-friend": {
|
||||
"message": "Додати друга"
|
||||
@@ -90,13 +96,13 @@
|
||||
"message": "Може відрізнятися від його або її імені користувача Minecraft!"
|
||||
},
|
||||
"friends.add-friend.username.placeholder": {
|
||||
"message": "Уведіть ім’я користувача Modrinth…"
|
||||
"message": "Уведіть ім’я користувача…"
|
||||
},
|
||||
"friends.add-friend.username.title": {
|
||||
"message": "Яке ім’я користувача Modrinth у вашого друга?"
|
||||
},
|
||||
"friends.add-friends-to-share": {
|
||||
"message": "<link>Додайте друзів</link>, щоб бачити, у що вони грають!"
|
||||
"message": "<link>Додайте друзів</link>, аби бачити, у що вони грають!"
|
||||
},
|
||||
"friends.friend.cancel-request": {
|
||||
"message": "Скасувати запит"
|
||||
@@ -126,7 +132,7 @@
|
||||
"message": "Очікується"
|
||||
},
|
||||
"friends.no-friends-match": {
|
||||
"message": "Немає друзів, котрі збігаються з «{query}»"
|
||||
"message": "Немає друзів, які збігаються з «{query}»"
|
||||
},
|
||||
"friends.search-friends-placeholder": {
|
||||
"message": "Шукати друзів…"
|
||||
@@ -156,7 +162,7 @@
|
||||
"message": "Додати сервер"
|
||||
},
|
||||
"instance.edit-server.title": {
|
||||
"message": "Змінити сервер"
|
||||
"message": "Редагувати сервер"
|
||||
},
|
||||
"instance.edit-world.hide-from-home": {
|
||||
"message": "Не показувати на головній сторінці"
|
||||
@@ -177,7 +183,7 @@
|
||||
"message": "Вимкнені проєкти"
|
||||
},
|
||||
"instance.filter.updates-available": {
|
||||
"message": "Наявні оновлення"
|
||||
"message": "Оновлення доступні"
|
||||
},
|
||||
"instance.server-modal.address": {
|
||||
"message": "Адреса"
|
||||
@@ -195,13 +201,13 @@
|
||||
"message": "Загальні"
|
||||
},
|
||||
"instance.settings.tabs.general.delete": {
|
||||
"message": "Видалити примірник"
|
||||
"message": "Видалити профіль"
|
||||
},
|
||||
"instance.settings.tabs.general.delete.button": {
|
||||
"message": "Видалити профіль"
|
||||
},
|
||||
"instance.settings.tabs.general.delete.description": {
|
||||
"message": "Назавжди видаляє профіль з вашого пристрою, включно з вашими світами, налаштуваннями та всім встановленим контентом.\nБудьте обережні, після видалення, відновити профіль буде неможливо."
|
||||
"message": "Назавжди видаляє профіль з вашого пристрою, включно з вашими світами, налаштуваннями та всім установленим умістом. Будьте обережні, після видалення, відновити профіль буде неможливо."
|
||||
},
|
||||
"instance.settings.tabs.general.deleting.button": {
|
||||
"message": "Видалення…"
|
||||
@@ -210,13 +216,13 @@
|
||||
"message": "Клонувати"
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-button.tooltip.installing": {
|
||||
"message": "Неможливо клонувати під час встановлення."
|
||||
"message": "Неможливо клонувати під час установлення."
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-instance": {
|
||||
"message": "Клонувати профіль"
|
||||
},
|
||||
"instance.settings.tabs.general.duplicate-instance.description": {
|
||||
"message": "Створює копію інсталяції, включно зі світами, налаштуваннями, модами тощо."
|
||||
"message": "Створює копію профілю, включно зі світами, налаштуваннями, модами тощо."
|
||||
},
|
||||
"instance.settings.tabs.general.edit-icon": {
|
||||
"message": "Редагувати значок"
|
||||
@@ -228,7 +234,7 @@
|
||||
"message": "Замінити значок"
|
||||
},
|
||||
"instance.settings.tabs.general.edit-icon.select": {
|
||||
"message": "Обрати значок"
|
||||
"message": "Вибрати значок"
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups": {
|
||||
"message": "Групи бібліотеки"
|
||||
@@ -270,13 +276,13 @@
|
||||
"message": "Запускається перед відкриттям профілю."
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch.enter": {
|
||||
"message": "Уведіть команду, що виконується перед запуском..."
|
||||
"message": "Уведіть команду, що виконуватиметься перед запуском…"
|
||||
},
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "Гуки запуску гри"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper": {
|
||||
"message": "Обгортач"
|
||||
"message": "Враппер"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper.description": {
|
||||
"message": "Обгортальна команда для запуску Minecraft."
|
||||
@@ -288,7 +294,7 @@
|
||||
"message": "Інсталяція"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.modded": {
|
||||
"message": "{platform} {version} для Minecraft {game_version} вже встановлена"
|
||||
"message": "{platform} {version} для Minecraft {game_version} вже встановлено"
|
||||
},
|
||||
"instance.settings.tabs.installation.change-version.already-installed.vanilla": {
|
||||
"message": "Ванільна {game_version} вже встановлена"
|
||||
@@ -324,7 +330,7 @@
|
||||
"message": "Установити"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "Відбувається встановлення"
|
||||
"message": "Установлення триває"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "Версія {loader}"
|
||||
@@ -339,7 +345,7 @@
|
||||
"message": "{loader} недоступний для Minecraft {version}. Спробуйте інший завантажувач модів."
|
||||
},
|
||||
"instance.settings.tabs.installation.no-modpack-found": {
|
||||
"message": "Цей екземпляр пов’язана з пакетом модів, проте сам пакет модів не вдалося знайти на Modrinth."
|
||||
"message": "Цей профіль пов’язаний зі збіркою, проте саму збірку не вдалося знайти на Modrinth."
|
||||
},
|
||||
"instance.settings.tabs.installation.platform": {
|
||||
"message": "Платформа"
|
||||
@@ -351,13 +357,13 @@
|
||||
"message": "Перевстановлення збірки"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "Перевстановлення скине увесь доданий або модифікований уміст до наданого пакета модів, прибираючи будь-які, додатково встановлені вами моди чи вміст.\nЯкщо ви змінювали екземпляр, це може виправити непередбачувану поведінку, однак, якщо ваші світи залежать від додаткового вмісту, це може зламати ці світи."
|
||||
"message": "Перевстановлення скине ввесь доданий або модифікований уміст до наданого збіркою, прибираючи будь-які додатково встановлені вами моди чи вміст. Якщо ви змінювали профіль, це може виправити непередбачувану поведінку, однак, якщо ваші світи залежать від додаткового вмісту, світи можуть пошкодитися."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "Ви впевнені, що хочете перевстановити цей профіль?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "Скидає вміст інсталяції до початкового стану, прибираючи будь-які моди чи вміст, що було додано поверх оригінального пакета модів."
|
||||
"message": "Скидає вміст профілю до початкового стану, прибираючи будь-які моди чи вміст, що було додано поверх оригінальної збірки."
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "Перевстановити збірку"
|
||||
@@ -369,13 +375,13 @@
|
||||
"message": "Лагодження"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "Відновлення перевстановлює залежності Minecraft та перевіряє їх на наявність пошкоджень. Це може розв’язати проблеми, якщо ваша гра не запускається через помилки запускача, але не розв’яже проблеми або збої, пов’язані зі встановленими модифікаціями."
|
||||
"message": "Відновлення перевстановлює залежності Minecraft та перевіряє їх на наявність пошкоджень. Це може розв’язати проблеми, якщо ваша гра не запускається через помилки запускача, але не розв’яже проблеми або збої, пов’язані зі встановленими модами."
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "Відновити профіль?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "Лагодження в процесі"
|
||||
"message": "Лагодження триває"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "Скинути до поточного"
|
||||
@@ -399,7 +405,7 @@
|
||||
"message": "Неможливо {action} під час установлення"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-offline": {
|
||||
"message": "Неможливо {action} без з’єднання з Інтернетом"
|
||||
"message": "Неможливо {action} без з’єднання з інтернетом"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.cannot-while-repairing": {
|
||||
"message": "Неможливо {action} під час лагодження"
|
||||
@@ -411,13 +417,13 @@
|
||||
"message": "Відв’язати профіль"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "Якщо ви продовжите, ви не зможете повторно підв’язати його без створення повністю нової інсталяції. Ви більше не будете отримувати оновлення пакета модів та вона стане звичайною."
|
||||
"message": "Якщо ви продовжите, ви не зможете повторно підв’язати його без створення повністю нового профілю. Ви більше не будете отримувати оновлення збірки та цей профіль стане звичайним."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "Ви впевнені, що хочете відв’язати цей екземпляр?"
|
||||
"message": "Ви впевнені, що хочете відв’язати цей профіль?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "Цей профіль пов’язаний з пакетом модів, тобто, не можна оновлювати моди та не можна змінювати завантажувач чи версію Minecraft. Відв’язання призведе до остаточного від’єднання цієї інсталяції від пакета модів."
|
||||
"message": "Цей профіль пов’язаний зі збіркою, тобто, не можна оновлювати моди та не можна змінювати завантажувач чи версію Minecraft. Відв’язання призведе до остаточного від’єднання цього профілю від збірки."
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "Відв’язати від збірки"
|
||||
@@ -435,7 +441,7 @@
|
||||
"message": "Аргументи Java"
|
||||
},
|
||||
"instance.settings.tabs.java.java-installation": {
|
||||
"message": "Установлення Java"
|
||||
"message": "Інсталяції Java"
|
||||
},
|
||||
"instance.settings.tabs.java.java-memory": {
|
||||
"message": "Виділена пам’ять"
|
||||
@@ -450,7 +456,7 @@
|
||||
"message": "Повний екран"
|
||||
},
|
||||
"instance.settings.tabs.window.fullscreen.description": {
|
||||
"message": "Змусити гру запускатися на повний екран (використовуючи options.txt)."
|
||||
"message": "Запускати гру в повноекранному режимі (за допомогою options.txt)."
|
||||
},
|
||||
"instance.settings.tabs.window.height": {
|
||||
"message": "Висота"
|
||||
@@ -470,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Уведіть ширину…"
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Налаштування"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Сервер Minecraft"
|
||||
},
|
||||
@@ -483,7 +486,7 @@
|
||||
"message": "Скопіювати адресу"
|
||||
},
|
||||
"instance.worlds.dont_show_on_home": {
|
||||
"message": "Не показувати на Головній"
|
||||
"message": "Не показувати на головній"
|
||||
},
|
||||
"instance.worlds.filter.available": {
|
||||
"message": "Доступно"
|
||||
@@ -495,10 +498,10 @@
|
||||
"message": "Режим гардкору"
|
||||
},
|
||||
"instance.worlds.incompatible_server": {
|
||||
"message": "Несумісний сервер"
|
||||
"message": "Сервер несумісний"
|
||||
},
|
||||
"instance.worlds.no_contact": {
|
||||
"message": "Не вдалося зв’язатися з сервером"
|
||||
"message": "Не вдалося зв’язатися зі сервером"
|
||||
},
|
||||
"instance.worlds.no_server_quick_play": {
|
||||
"message": "Запускатися у сервери напряму можливо лише починаючи з версії Minecraft Alpha 1.0.5"
|
||||
@@ -519,7 +522,7 @@
|
||||
"message": "Переглянути профіль"
|
||||
},
|
||||
"instance.worlds.world_in_use": {
|
||||
"message": "Світ зараз використовується"
|
||||
"message": "Світ наразі використовується"
|
||||
},
|
||||
"search.filter.locked.instance": {
|
||||
"message": "Надано профілем"
|
||||
@@ -528,7 +531,7 @@
|
||||
"message": "Версія гри надана профілем"
|
||||
},
|
||||
"search.filter.locked.instance-loader.title": {
|
||||
"message": "Запускач наданий профілем"
|
||||
"message": "Завантажувач наданий профілем"
|
||||
},
|
||||
"search.filter.locked.instance.sync": {
|
||||
"message": "Синхронізувати з профілем"
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
"message": "Thêm một người bạn"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} yêu cầu kết bạn"
|
||||
"message": "{count} yêu cầu kết bạn {count, plural, one {request} other {requests}}"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "Gửi yêu cầu kết bạn"
|
||||
@@ -470,9 +470,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "Nhập chiều dài..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "Thiết đặt"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Một máy chủ Minecraft"
|
||||
},
|
||||
|
||||
@@ -36,7 +36,10 @@
|
||||
"message": "Modrinth App v{version} 更新已就绪!立即重启更新,或退出时自动安装。"
|
||||
},
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Modrinth App v{version} 下载完成。立即重启更新,或退出时自动安装。"
|
||||
"message": "Modrinth App v{version} 已经完成下载。现在重新启动以更新,或在关闭 Modrinth App 时自动更新。"
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Modrinth App v{version} 现已发布。请使用你的软件包管理器进行更新,获取最新功能与修复!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Modrinth App v{version} 现已发布!由于你正在使用按流量计费的网络,该更新未自动下载。"
|
||||
@@ -47,11 +50,14 @@
|
||||
"app.update-toast.download": {
|
||||
"message": "下载({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "下载"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "下载中…"
|
||||
},
|
||||
"app.update-toast.reload": {
|
||||
"message": "重启应用"
|
||||
"message": "重新启动"
|
||||
},
|
||||
"app.update-toast.title": {
|
||||
"message": "有可用更新"
|
||||
@@ -63,7 +69,7 @@
|
||||
"message": "点击此处查看更新日志。"
|
||||
},
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "此版本{version} 已成功安装!"
|
||||
"message": "版本 {version} 已成功安装!"
|
||||
},
|
||||
"app.update.download-update": {
|
||||
"message": "下载更新"
|
||||
@@ -96,7 +102,7 @@
|
||||
"message": "好友的 Modrinth 用户名是什么?"
|
||||
},
|
||||
"friends.add-friends-to-share": {
|
||||
"message": "<link>添加好友</link>,看看他们在玩什么!"
|
||||
"message": "<link>添加好友</link> 来看看他们都在玩什么!"
|
||||
},
|
||||
"friends.friend.cancel-request": {
|
||||
"message": "取消请求"
|
||||
@@ -129,7 +135,7 @@
|
||||
"message": "没有对应名字“{query}”的好友"
|
||||
},
|
||||
"friends.search-friends-placeholder": {
|
||||
"message": "搜索好友…"
|
||||
"message": "搜索好友……"
|
||||
},
|
||||
"friends.section.heading": {
|
||||
"message": "{title} - {count}"
|
||||
@@ -165,7 +171,7 @@
|
||||
"message": "名称"
|
||||
},
|
||||
"instance.edit-world.placeholder-name": {
|
||||
"message": "Minecraft 存档"
|
||||
"message": "Minecraft 世界"
|
||||
},
|
||||
"instance.edit-world.reset-icon": {
|
||||
"message": "重置图标"
|
||||
@@ -195,10 +201,10 @@
|
||||
"message": "通用"
|
||||
},
|
||||
"instance.settings.tabs.general.delete": {
|
||||
"message": "删除此实例"
|
||||
"message": "删除实例"
|
||||
},
|
||||
"instance.settings.tabs.general.delete.button": {
|
||||
"message": "删除此实例"
|
||||
"message": "删除实例"
|
||||
},
|
||||
"instance.settings.tabs.general.delete.description": {
|
||||
"message": "将从设备中永久删除该实例,包括所有存档、配置文件及已安装内容。此操作不可撤销,请谨慎操作。"
|
||||
@@ -231,13 +237,13 @@
|
||||
"message": "选择图标"
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups": {
|
||||
"message": "实例分组"
|
||||
"message": "库分组"
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups.create": {
|
||||
"message": "创建新的分组"
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups.description": {
|
||||
"message": "实例分组可将你的实例整理到实例库的不同版块中。"
|
||||
"message": "库分组功能可以让你将实例整理到库中的不同部分。"
|
||||
},
|
||||
"instance.settings.tabs.general.library-groups.enter-name": {
|
||||
"message": "输入分组名称"
|
||||
@@ -246,22 +252,22 @@
|
||||
"message": "名称"
|
||||
},
|
||||
"instance.settings.tabs.hooks": {
|
||||
"message": "启动钩子"
|
||||
"message": "启动Hooks"
|
||||
},
|
||||
"instance.settings.tabs.hooks.custom-hooks": {
|
||||
"message": "自定义启动钩子"
|
||||
"message": "自定义启动Hooks"
|
||||
},
|
||||
"instance.settings.tabs.hooks.description": {
|
||||
"message": "钩子允许高级用户在启动游戏前后运行特定的系统命令。"
|
||||
"message": "Hooks允许高级用户在启动游戏前后运行特定的系统命令。"
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit": {
|
||||
"message": "退出后"
|
||||
"message": "退出后执行"
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit.description": {
|
||||
"message": "在游戏关闭后运行。"
|
||||
},
|
||||
"instance.settings.tabs.hooks.post-exit.enter": {
|
||||
"message": "输入退出后运行的命令…"
|
||||
"message": "输入退出后运行的命令……"
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch": {
|
||||
"message": "启动前"
|
||||
@@ -270,19 +276,19 @@
|
||||
"message": "在实例启动前运行。"
|
||||
},
|
||||
"instance.settings.tabs.hooks.pre-launch.enter": {
|
||||
"message": "输入启动前命令..."
|
||||
"message": "输入预启动命令……"
|
||||
},
|
||||
"instance.settings.tabs.hooks.title": {
|
||||
"message": "游戏启动钩子"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper": {
|
||||
"message": "包装命令"
|
||||
"message": "包装器命令"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper.description": {
|
||||
"message": "用于启动 Minecraft 的包装命令。"
|
||||
"message": "用于启动 Minecraft 的包装器命令。"
|
||||
},
|
||||
"instance.settings.tabs.hooks.wrapper.enter": {
|
||||
"message": "输入包装命令……"
|
||||
"message": "输入包装器命令……"
|
||||
},
|
||||
"instance.settings.tabs.installation": {
|
||||
"message": "安装"
|
||||
@@ -351,13 +357,13 @@
|
||||
"message": "正在重新安装整合包"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.description": {
|
||||
"message": "重新安装实例将并重置所有已安装或修改的内容,恢复到整合包的初始状态,移除在原来的安装内容上另加的所有模组或内容。该操作有可能修复因实例更改导致的异常,但若你的世界目前依赖额外安装的内容的操作,此举可能会损坏现有世界。"
|
||||
"message": "重新安装实例将重置所有已安装或修改的内容,并恢复到整合包的初始状态,移除在原来的安装内容上另外添加的的所有模组或内容。该操作有可能修复因实例更改导致的异常,但如果你的世界依赖已安装的额外内容,此举可能会损坏现有世界。"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.confirm.title": {
|
||||
"message": "你确定要重新安装该实例吗?"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.description": {
|
||||
"message": "重置实例至原始状态,移除你在原有整合包上添加的所有模组及其数据。"
|
||||
"message": "将实例的内容重置为原始状态,移除你在原始整合包基础上添加的任何修改或内容。"
|
||||
},
|
||||
"instance.settings.tabs.installation.reinstall.title": {
|
||||
"message": "重新安装整合包"
|
||||
@@ -369,19 +375,19 @@
|
||||
"message": "修复中"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.description": {
|
||||
"message": "修复实例时,会将重新安装 Minecraft 依赖,并检查文件完整性。该操作可能解决因启动器错误导致的启动失败问题,但不能解决由模组引发的问题和崩溃。"
|
||||
"message": "修复会重新安装 Minecraft 依赖项并检查是否有损坏。如果你的游戏因启动器相关错误无法启动,这可能会解决问题,但不会解决与已安装模组相关的问题或崩溃。"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.confirm.title": {
|
||||
"message": "确定修复该实例吗?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "修复中,请闭目养神,少安毋躁"
|
||||
"message": "正在修复"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "重置为当前版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.show-all-versions": {
|
||||
"message": "列出所有版本"
|
||||
"message": "显示所有版本"
|
||||
},
|
||||
"instance.settings.tabs.installation.tooltip.action.change-version": {
|
||||
"message": "切换版本"
|
||||
@@ -405,22 +411,22 @@
|
||||
"message": "修复时无法{action}"
|
||||
},
|
||||
"instance.settings.tabs.installation.unknown-version": {
|
||||
"message": "(嗯?未知版本)"
|
||||
"message": "(未知版本)"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.button": {
|
||||
"message": "解除关联实例"
|
||||
"message": "解除实例关联"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.description": {
|
||||
"message": "若继续操作,该实例将无法重新关联至原整合包,除非创建全新的实例。此后,不再接收整合包的任何更新,该实例变为普通实例。"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.confirm.title": {
|
||||
"message": "你确定要解除关联实例吗?"
|
||||
"message": "你确定要取消关联此实例吗?"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.description": {
|
||||
"message": "该实例已关联至整合包,因此无法单独更新模组,也无法更改模组加载器和 Minecraft 版本。解除关联后,该实例将无法重新关联至整合包。"
|
||||
},
|
||||
"instance.settings.tabs.installation.unlink.title": {
|
||||
"message": "解除整合包关联"
|
||||
"message": "取消整合包关联"
|
||||
},
|
||||
"instance.settings.tabs.java": {
|
||||
"message": "Java 及内存"
|
||||
@@ -438,10 +444,10 @@
|
||||
"message": "Java 安装路径"
|
||||
},
|
||||
"instance.settings.tabs.java.java-memory": {
|
||||
"message": "分配内存"
|
||||
"message": "内存分配"
|
||||
},
|
||||
"instance.settings.tabs.window": {
|
||||
"message": "窗口"
|
||||
"message": "游戏窗口"
|
||||
},
|
||||
"instance.settings.tabs.window.custom-window-settings": {
|
||||
"message": "自定义窗口设置"
|
||||
@@ -459,7 +465,7 @@
|
||||
"message": "游戏启动时的窗口高度。"
|
||||
},
|
||||
"instance.settings.tabs.window.height.enter": {
|
||||
"message": "输入高度…"
|
||||
"message": "输入高度……"
|
||||
},
|
||||
"instance.settings.tabs.window.width": {
|
||||
"message": "宽度"
|
||||
@@ -468,10 +474,7 @@
|
||||
"message": "游戏启动时的窗口宽度。"
|
||||
},
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "输入宽度…"
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "设置"
|
||||
"message": "输入宽度……"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Minecraft 服务器"
|
||||
@@ -483,7 +486,7 @@
|
||||
"message": "复制地址"
|
||||
},
|
||||
"instance.worlds.dont_show_on_home": {
|
||||
"message": "在主界面不显示"
|
||||
"message": "在主界面隐藏"
|
||||
},
|
||||
"instance.worlds.filter.available": {
|
||||
"message": "可用"
|
||||
@@ -510,7 +513,7 @@
|
||||
"message": "游玩实例"
|
||||
},
|
||||
"instance.worlds.type.server": {
|
||||
"message": "服务器"
|
||||
"message": "服务端"
|
||||
},
|
||||
"instance.worlds.type.singleplayer": {
|
||||
"message": "单人游戏"
|
||||
@@ -519,7 +522,7 @@
|
||||
"message": "查看实例"
|
||||
},
|
||||
"instance.worlds.world_in_use": {
|
||||
"message": "世界占用中"
|
||||
"message": "世界正在使用中"
|
||||
},
|
||||
"search.filter.locked.instance": {
|
||||
"message": "由该实例提供"
|
||||
|
||||
@@ -38,15 +38,21 @@
|
||||
"app.update-toast.body.download-complete": {
|
||||
"message": "Modrinth App v{version} 已完成下載。重新載入立即更新,或是在你關閉 Modrinth App 時自動更新。"
|
||||
},
|
||||
"app.update-toast.body.linux": {
|
||||
"message": "Modrinth App v{version} 現已推出。請使用您的套件管理員進行更新,以取得最新的功能與修正!"
|
||||
},
|
||||
"app.update-toast.body.metered": {
|
||||
"message": "Modrinth App v{version} 現已推出!由於你正使用計量付費的網路,我們沒有自動下載它。"
|
||||
},
|
||||
"app.update-toast.changelog": {
|
||||
"message": "變更紀錄"
|
||||
"message": "更新日誌"
|
||||
},
|
||||
"app.update-toast.download": {
|
||||
"message": "下載 ({size})"
|
||||
},
|
||||
"app.update-toast.download-page": {
|
||||
"message": "下載"
|
||||
},
|
||||
"app.update-toast.downloading": {
|
||||
"message": "下載中..."
|
||||
},
|
||||
@@ -60,7 +66,7 @@
|
||||
"message": "下載完成"
|
||||
},
|
||||
"app.update.complete-toast.text": {
|
||||
"message": "按這裡查看變更紀錄。"
|
||||
"message": "按這裡查看更新日誌。"
|
||||
},
|
||||
"app.update.complete-toast.title": {
|
||||
"message": "版本 {version} 已成功安裝!"
|
||||
@@ -78,10 +84,10 @@
|
||||
"message": "新增好友"
|
||||
},
|
||||
"friends.action.view-friend-requests": {
|
||||
"message": "{count} 個好友請求"
|
||||
"message": "{count} 個好友邀請"
|
||||
},
|
||||
"friends.add-friend.submit": {
|
||||
"message": "傳送好友請求"
|
||||
"message": "送出好友邀請"
|
||||
},
|
||||
"friends.add-friend.title": {
|
||||
"message": "新增好友"
|
||||
@@ -105,7 +111,7 @@
|
||||
"message": "移除好友"
|
||||
},
|
||||
"friends.friend.request-sent": {
|
||||
"message": "已送出好友請求"
|
||||
"message": "已送出好友邀請"
|
||||
},
|
||||
"friends.friend.view-profile": {
|
||||
"message": "查看個人檔案"
|
||||
@@ -135,7 +141,7 @@
|
||||
"message": "{title} - {count}"
|
||||
},
|
||||
"friends.sign-in-to-add-friends": {
|
||||
"message": "<link>登入 Modrinth 帳號</link>即可新增好友並查看對方正在玩什麼!"
|
||||
"message": "<link>登入 Modrinth 帳號</link>即可新增好友並查看他們正在玩什麼!"
|
||||
},
|
||||
"instance.add-server.add-and-play": {
|
||||
"message": "新增並遊玩"
|
||||
@@ -324,7 +330,7 @@
|
||||
"message": "安裝"
|
||||
},
|
||||
"instance.settings.tabs.installation.install.in-progress": {
|
||||
"message": "安裝進行中"
|
||||
"message": "安裝中"
|
||||
},
|
||||
"instance.settings.tabs.installation.loader-version": {
|
||||
"message": "{loader} 版本"
|
||||
@@ -375,7 +381,7 @@
|
||||
"message": "是否要修復實例?"
|
||||
},
|
||||
"instance.settings.tabs.installation.repair.in-progress": {
|
||||
"message": "修復進行中"
|
||||
"message": "修復中"
|
||||
},
|
||||
"instance.settings.tabs.installation.reset-selections": {
|
||||
"message": "重設為目前版本"
|
||||
@@ -470,9 +476,6 @@
|
||||
"instance.settings.tabs.window.width.enter": {
|
||||
"message": "輸入寬度..."
|
||||
},
|
||||
"instance.settings.title": {
|
||||
"message": "設定"
|
||||
},
|
||||
"instance.worlds.a_minecraft_server": {
|
||||
"message": "Minecraft 伺服器"
|
||||
},
|
||||
|
||||
@@ -38,10 +38,10 @@ pub async fn authenticate_run() -> theseus::Result<Credentials> {
|
||||
async fn main() -> theseus::Result<()> {
|
||||
println!("Starting.");
|
||||
|
||||
let _log_guard = theseus::start_logger();
|
||||
let _log_guard = theseus::start_logger("ModrinthApp");
|
||||
|
||||
// Initialize state
|
||||
State::init().await?;
|
||||
State::init("ModrinthApp".to_owned()).await?;
|
||||
|
||||
let worlds = get_recent_worlds(4, EnumSet::all()).await?;
|
||||
for world in worlds {
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 21 KiB |
@@ -29,6 +29,9 @@ pub async fn settings_set(settings: Settings) -> Result<()> {
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn cancel_directory_change() -> Result<()> {
|
||||
settings::cancel_directory_change().await?;
|
||||
let state = State::get().await?;
|
||||
let identifier = &state.app_identifier;
|
||||
|
||||
settings::cancel_directory_change(identifier).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -107,10 +107,12 @@ pub async fn open_path<R: Runtime>(app: tauri::AppHandle<R>, path: PathBuf) {
|
||||
|
||||
#[tauri::command]
|
||||
pub async fn show_launcher_logs_folder<R: Runtime>(app: tauri::AppHandle<R>) {
|
||||
let path = DirectoryInfo::launcher_logs_dir().unwrap_or_default();
|
||||
// failure to get folder just opens filesystem
|
||||
// (ie: if in debug mode only and launcher_logs never created)
|
||||
open_path(app, path).await;
|
||||
if let Some(d) = DirectoryInfo::global_handle_if_ready() {
|
||||
let path = d.launcher_logs_dir().unwrap_or_default();
|
||||
// failure to get folder just opens filesystem
|
||||
// (ie: if in debug mode only and launcher_logs never created)
|
||||
open_path(app, path).await;
|
||||
}
|
||||
}
|
||||
|
||||
// Get opening command
|
||||
|
||||
@@ -28,7 +28,7 @@ async fn initialize_state(app: tauri::AppHandle) -> api::Result<()> {
|
||||
theseus::EventState::init(app.clone()).await?;
|
||||
|
||||
tracing::info!("Initializing app state...");
|
||||
State::init().await?;
|
||||
State::init(app.config().identifier.clone()).await?;
|
||||
|
||||
let state = State::get().await?;
|
||||
app.asset_protocol_scope()
|
||||
@@ -110,7 +110,10 @@ fn main() {
|
||||
RUST_LOG="theseus=trace" {run command}
|
||||
|
||||
*/
|
||||
let _log_guard = theseus::start_logger();
|
||||
|
||||
let tauri_context = tauri::generate_context!();
|
||||
|
||||
let _log_guard = theseus::start_logger(&tauri_context.config().identifier);
|
||||
|
||||
tracing::info!("Initialized tracing subscriber. Loading Modrinth App!");
|
||||
|
||||
@@ -243,7 +246,7 @@ fn main() {
|
||||
]);
|
||||
|
||||
tracing::info!("Initializing app...");
|
||||
let app = builder.build(tauri::generate_context!());
|
||||
let app = builder.build(tauri_context);
|
||||
|
||||
match app {
|
||||
Ok(app) => {
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
"capabilities": ["ads", "core", "plugins"],
|
||||
"csp": {
|
||||
"default-src": "'self' customprotocol: asset:",
|
||||
"connect-src": "ipc: http://ipc.localhost https://modrinth.com https://*.modrinth.com https://*.posthog.com https://*.sentry.io https://api.mclo.gs 'self' data: blob:",
|
||||
"connect-src": "ipc: http://ipc.localhost https://modrinth.com https://*.modrinth.com https://*.posthog.com https://*.sentry.io https://api.mclo.gs http://textures.minecraft.net https://textures.minecraft.net 'self' data: blob:",
|
||||
"font-src": ["https://cdn-raw.modrinth.com/fonts/"],
|
||||
"img-src": "https: 'unsafe-inline' 'self' asset: http://asset.localhost http://textures.minecraft.net blob: data:",
|
||||
"style-src": "'unsafe-inline' 'self'",
|
||||
|
||||
@@ -166,6 +166,17 @@ export default defineNuxtConfig({
|
||||
|
||||
await fs.writeFile('./src/generated/state.json', JSON.stringify(state))
|
||||
|
||||
// throw if errors and building for prod (preview & staging allowed to have errors)
|
||||
if (
|
||||
process.env.BUILD_ENV === 'production' &&
|
||||
process.env.PREVIEW !== 'true' &&
|
||||
generatedState.errors.length > 0
|
||||
) {
|
||||
throw new Error(
|
||||
`Production build failed: State generation encountered errors. Error codes: ${JSON.stringify(generatedState.errors)}; API URL: ${API_URL}`,
|
||||
)
|
||||
}
|
||||
|
||||
console.log('Tags generated!')
|
||||
|
||||
const robotsContent =
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
"lint": "eslint . && prettier --check .",
|
||||
"fix": "eslint . --fix && prettier --write .",
|
||||
"intl:extract": "formatjs extract \"src/{components,composables,layouts,middleware,modules,pages,plugins,utils}/**/*.{vue,ts,tsx,js,jsx,mts,cts,mjs,cjs}\" \"src/error.vue\" --ignore \"**/*.d.ts\" --ignore node_modules --out-file src/locales/en-US/index.json --format crowdin --preserve-whitespace",
|
||||
"cf-deploy": "pnpm run build && wrangler deploy --env preview",
|
||||
"cf-dev": "pnpm run build && wrangler dev --env preview",
|
||||
"cf-deploy": "pnpm run build && wrangler deploy --env staging",
|
||||
"cf-dev": "pnpm run build && wrangler dev --env staging",
|
||||
"cf-typegen": "wrangler types"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -223,10 +223,7 @@
|
||||
:where(input) {
|
||||
box-sizing: border-box;
|
||||
max-height: 40px;
|
||||
|
||||
&:not(.stylized-toggle) {
|
||||
max-width: 100%;
|
||||
}
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
:where(.adjacent-input, &.adjacent-input) {
|
||||
@@ -271,10 +268,6 @@
|
||||
&:not(&.small) {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
|
||||
.stylized-toggle {
|
||||
flex-basis: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -650,64 +643,6 @@ tr.button-transparent {
|
||||
}
|
||||
}
|
||||
|
||||
.switch {
|
||||
-webkit-appearance: none;
|
||||
-moz-appearance: none;
|
||||
appearance: none;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
cursor: pointer;
|
||||
|
||||
&:focus {
|
||||
//outline: 0; Bad for accessibility
|
||||
}
|
||||
}
|
||||
|
||||
.stylized-toggle {
|
||||
@extend .button-base;
|
||||
|
||||
box-sizing: content-box;
|
||||
min-height: 32px;
|
||||
height: 32px;
|
||||
width: 52px;
|
||||
max-width: 52px;
|
||||
border-radius: var(--size-rounded-max);
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
margin: 0;
|
||||
transition: all 0.2s ease;
|
||||
background: var(--color-button-bg);
|
||||
|
||||
&:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 7px;
|
||||
left: 7px;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
border-radius: 50%;
|
||||
background: var(--color-toggle-handle);
|
||||
transition: all 0.2s cubic-bezier(0.5, 0.1, 0.75, 1.35);
|
||||
outline: 2px solid transparent;
|
||||
|
||||
@media (prefers-reduced-motion) {
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
|
||||
&:checked {
|
||||
background-color: var(--color-brand);
|
||||
|
||||
&:after {
|
||||
transform: translatex(20px);
|
||||
background: var(--color-brand-inverted);
|
||||
}
|
||||
}
|
||||
|
||||
&:hover &:focus {
|
||||
background: var(--color-button-bg);
|
||||
}
|
||||
}
|
||||
|
||||
.textarea-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
@@ -60,8 +60,6 @@ html {
|
||||
--color-button-bg-active: #c3c6cb;
|
||||
--color-button-text-active: var(--color-button-text-hover);
|
||||
|
||||
--color-toggle-handle: var(--color-icon);
|
||||
|
||||
--color-dropdown-bg: var(--color-button-bg);
|
||||
--color-dropdown-text: var(--color-button-text);
|
||||
|
||||
@@ -177,8 +175,6 @@ html {
|
||||
--color-button-bg-active: #616570;
|
||||
--color-button-text-active: var(--color-button-text-hover);
|
||||
|
||||
--color-toggle-handle: var(--color-button-text);
|
||||
|
||||
--color-dropdown-bg: var(--color-button-bg);
|
||||
--color-dropdown-text: var(--color-button-text);
|
||||
|
||||
|
||||
@@ -2,71 +2,54 @@
|
||||
<nav
|
||||
ref="scrollContainer"
|
||||
class="experimental-styles-within relative flex w-fit overflow-x-auto rounded-full bg-bg-raised p-1 text-sm font-bold"
|
||||
:class="[mode === 'navigation' ? 'card-shadow' : undefined]"
|
||||
:class="{ 'card-shadow': mode === 'navigation' }"
|
||||
>
|
||||
<template v-if="mode === 'navigation'">
|
||||
<NuxtLink
|
||||
v-for="(link, index) in filteredLinks"
|
||||
v-show="link.shown === undefined ? true : link.shown"
|
||||
v-show="link.shown ?? true"
|
||||
:key="link.href"
|
||||
ref="tabLinkElements"
|
||||
:to="query ? (link.href ? `?${query}=${link.href}` : '?') : link.href"
|
||||
class="button-animation z-[1] flex flex-row items-center gap-2 px-4 py-2 focus:rounded-full"
|
||||
:class="getSSRFallbackClasses(index)"
|
||||
@mouseenter="link.onHover?.()"
|
||||
@focus="link.onHover?.()"
|
||||
>
|
||||
<component
|
||||
:is="link.icon"
|
||||
v-if="link.icon"
|
||||
class="size-5"
|
||||
:class="{
|
||||
'text-brand': currentActiveIndex === index && !subpageSelected,
|
||||
'text-secondary': currentActiveIndex !== index || subpageSelected,
|
||||
}"
|
||||
/>
|
||||
<span class="text-nowrap text-contrast">{{ link.label }}</span>
|
||||
<component :is="link.icon" v-if="link.icon" class="size-5" :class="getIconClasses(index)" />
|
||||
<span class="text-nowrap" :class="getLabelClasses(index)">
|
||||
{{ link.label }}
|
||||
</span>
|
||||
</NuxtLink>
|
||||
</template>
|
||||
|
||||
<template v-else>
|
||||
<div
|
||||
v-for="(link, index) in filteredLinks"
|
||||
v-show="link.shown === undefined ? true : link.shown"
|
||||
v-show="link.shown ?? true"
|
||||
:key="link.href"
|
||||
ref="tabLinkElements"
|
||||
class="button-animation z-[1] flex flex-row items-center gap-2 px-4 py-2 hover:cursor-pointer focus:rounded-full"
|
||||
:class="getSSRFallbackClasses(index)"
|
||||
@click="emit('tabClick', index, link)"
|
||||
>
|
||||
<component
|
||||
:is="link.icon"
|
||||
v-if="link.icon"
|
||||
class="size-5"
|
||||
:class="{
|
||||
'text-brand': currentActiveIndex === index && !subpageSelected,
|
||||
'text-secondary': currentActiveIndex !== index || subpageSelected,
|
||||
}"
|
||||
/>
|
||||
<span
|
||||
class="text-nowrap"
|
||||
:class="{
|
||||
'text-brand': currentActiveIndex === index && !subpageSelected,
|
||||
'text-contrast': currentActiveIndex !== index || subpageSelected,
|
||||
}"
|
||||
>{{ link.label }}</span
|
||||
>
|
||||
<component :is="link.icon" v-if="link.icon" class="size-5" :class="getIconClasses(index)" />
|
||||
<span class="text-nowrap" :class="getLabelClasses(index)">
|
||||
{{ link.label }}
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Animated slider background -->
|
||||
<div
|
||||
:class="`navtabs-transition pointer-events-none absolute h-[calc(100%-0.5rem)] overflow-hidden rounded-full p-1 ${
|
||||
subpageSelected ? 'bg-button-bg' : 'bg-button-bgSelected'
|
||||
}`"
|
||||
:style="{
|
||||
left: sliderLeftPx,
|
||||
top: sliderTopPx,
|
||||
right: sliderRightPx,
|
||||
bottom: sliderBottomPx,
|
||||
opacity:
|
||||
sliderLeft === 4 && sliderLeft === sliderRight ? 0 : currentActiveIndex === -1 ? 0 : 1,
|
||||
}"
|
||||
class="pointer-events-none absolute h-[calc(100%-0.5rem)] overflow-hidden rounded-full p-1"
|
||||
:class="[
|
||||
subpageSelected ? 'bg-button-bg' : 'bg-button-bgSelected',
|
||||
{ 'navtabs-transition': transitionsEnabled },
|
||||
]"
|
||||
:style="sliderStyle"
|
||||
aria-hidden="true"
|
||||
></div>
|
||||
/>
|
||||
</nav>
|
||||
</template>
|
||||
|
||||
@@ -82,6 +65,7 @@ interface Tab {
|
||||
shown?: boolean
|
||||
icon?: Component
|
||||
subpages?: string[]
|
||||
onHover?: () => void
|
||||
}
|
||||
|
||||
const props = withDefaults(
|
||||
@@ -102,124 +86,194 @@ const emit = defineEmits<{
|
||||
tabClick: [index: number, tab: Tab]
|
||||
}>()
|
||||
|
||||
// DOM refs
|
||||
const scrollContainer = ref<HTMLElement | null>(null)
|
||||
const tabLinkElements = ref<HTMLElement[]>()
|
||||
|
||||
// Slider pos state
|
||||
const sliderLeft = ref(4)
|
||||
const sliderTop = ref(4)
|
||||
const sliderRight = ref(4)
|
||||
const sliderBottom = ref(4)
|
||||
|
||||
// active tab state
|
||||
const currentActiveIndex = ref(-1)
|
||||
const subpageSelected = ref(false)
|
||||
|
||||
const filteredLinks = computed(() =>
|
||||
props.links.filter((x) => (x.shown === undefined ? true : x.shown)),
|
||||
// SSR state
|
||||
const sliderReady = ref(false) // Slider is positioned and should be visible
|
||||
const transitionsEnabled = ref(false) // CSS transitions should apply (after first paint)
|
||||
|
||||
const filteredLinks = computed(() => props.links.filter((link) => link.shown ?? true))
|
||||
|
||||
const sliderStyle = computed(() => ({
|
||||
left: `${sliderLeft.value}px`,
|
||||
top: `${sliderTop.value}px`,
|
||||
right: `${sliderRight.value}px`,
|
||||
bottom: `${sliderBottom.value}px`,
|
||||
opacity: sliderReady.value && currentActiveIndex.value !== -1 ? 1 : 0,
|
||||
}))
|
||||
|
||||
const isActiveAndNotSubpage = computed(
|
||||
() => (index: number) => currentActiveIndex.value === index && !subpageSelected.value,
|
||||
)
|
||||
const sliderLeftPx = computed(() => `${sliderLeft.value}px`)
|
||||
const sliderTopPx = computed(() => `${sliderTop.value}px`)
|
||||
const sliderRightPx = computed(() => `${sliderRight.value}px`)
|
||||
const sliderBottomPx = computed(() => `${sliderBottom.value}px`)
|
||||
|
||||
const tabLinkElements = ref()
|
||||
function getSSRFallbackClasses(index: number) {
|
||||
if (sliderReady.value) return {}
|
||||
if (currentActiveIndex.value !== index) return {}
|
||||
|
||||
function pickLink() {
|
||||
let index = -1
|
||||
subpageSelected.value = false
|
||||
return {
|
||||
'rounded-full': true,
|
||||
'bg-button-bgSelected': !subpageSelected.value,
|
||||
'bg-button-bg': subpageSelected.value,
|
||||
}
|
||||
}
|
||||
|
||||
function getIconClasses(index: number) {
|
||||
return {
|
||||
'text-button-textSelected': isActiveAndNotSubpage.value(index),
|
||||
'text-secondary': !isActiveAndNotSubpage.value(index),
|
||||
}
|
||||
}
|
||||
|
||||
function getLabelClasses(index: number) {
|
||||
return {
|
||||
'text-button-textSelected': isActiveAndNotSubpage.value(index),
|
||||
'text-contrast': !isActiveAndNotSubpage.value(index),
|
||||
}
|
||||
}
|
||||
|
||||
function computeActiveIndex(): { index: number; isSubpage: boolean } {
|
||||
if (props.mode === 'local' && props.activeIndex !== undefined) {
|
||||
index = Math.min(props.activeIndex, filteredLinks.value.length - 1)
|
||||
} else {
|
||||
for (let i = filteredLinks.value.length - 1; i >= 0; i--) {
|
||||
const link = filteredLinks.value[i]
|
||||
if (props.query) {
|
||||
if (route.query[props.query] === link.href || (!route.query[props.query] && !link.href)) {
|
||||
index = i
|
||||
break
|
||||
}
|
||||
} else if (decodeURIComponent(route.path) === link.href) {
|
||||
index = i
|
||||
break
|
||||
} else if (
|
||||
decodeURIComponent(route.path).includes(link.href) ||
|
||||
(link.subpages &&
|
||||
link.subpages.some((subpage) => decodeURIComponent(route.path).includes(subpage)))
|
||||
) {
|
||||
index = i
|
||||
subpageSelected.value = true
|
||||
break
|
||||
}
|
||||
return {
|
||||
index: Math.min(props.activeIndex, filteredLinks.value.length - 1),
|
||||
isSubpage: false,
|
||||
}
|
||||
}
|
||||
|
||||
currentActiveIndex.value = index
|
||||
for (let i = filteredLinks.value.length - 1; i >= 0; i--) {
|
||||
const link = filteredLinks.value[i]
|
||||
const decodedPath = decodeURIComponent(route.path)
|
||||
|
||||
if (currentActiveIndex.value !== -1) {
|
||||
nextTick(() => startAnimation())
|
||||
// Query-based matching
|
||||
if (props.query) {
|
||||
const queryValue = route.query[props.query]
|
||||
if (queryValue === link.href || (!queryValue && !link.href)) {
|
||||
return { index: i, isSubpage: false }
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
// Exact path match
|
||||
if (decodedPath === link.href) {
|
||||
return { index: i, isSubpage: false }
|
||||
}
|
||||
|
||||
// Subpage match
|
||||
const isSubpageMatch =
|
||||
decodedPath.includes(link.href) ||
|
||||
link.subpages?.some((subpage) => decodedPath.includes(subpage))
|
||||
|
||||
if (isSubpageMatch) {
|
||||
return { index: i, isSubpage: true }
|
||||
}
|
||||
}
|
||||
|
||||
return { index: -1, isSubpage: false }
|
||||
}
|
||||
|
||||
function getTabElement(index: number): HTMLElement | null {
|
||||
if (!tabLinkElements.value?.[index]) return null
|
||||
|
||||
// In navigation mode, elements are NuxtLinks with $el property
|
||||
// In local mode, elements are plain divs
|
||||
const element = tabLinkElements.value[index]
|
||||
return props.mode === 'navigation' ? (element as any).$el : element
|
||||
}
|
||||
|
||||
function positionSlider() {
|
||||
const el = getTabElement(currentActiveIndex.value)
|
||||
if (!el?.offsetParent) return
|
||||
|
||||
const parent = el.offsetParent as HTMLElement
|
||||
const newPosition = {
|
||||
left: el.offsetLeft,
|
||||
top: el.offsetTop,
|
||||
right: parent.offsetWidth - el.offsetLeft - el.offsetWidth,
|
||||
bottom: parent.offsetHeight - el.offsetTop - el.offsetHeight,
|
||||
}
|
||||
|
||||
const isInitialPosition = sliderLeft.value === 4 && sliderRight.value === 4
|
||||
|
||||
if (isInitialPosition) {
|
||||
// Initial positioning: set position instantly, no animation
|
||||
sliderLeft.value = newPosition.left
|
||||
sliderRight.value = newPosition.right
|
||||
sliderTop.value = newPosition.top
|
||||
sliderBottom.value = newPosition.bottom
|
||||
|
||||
sliderReady.value = true
|
||||
|
||||
// enable transitions after slider is painted, so future changes animate
|
||||
requestAnimationFrame(() => {
|
||||
transitionsEnabled.value = true
|
||||
})
|
||||
} else {
|
||||
animateSliderTo(newPosition)
|
||||
}
|
||||
}
|
||||
|
||||
function animateSliderTo(newPosition: {
|
||||
left: number
|
||||
top: number
|
||||
right: number
|
||||
bottom: number
|
||||
}) {
|
||||
const STAGGER_DELAY = 200
|
||||
|
||||
// Horizontal animation - lead with the direction of movement
|
||||
if (newPosition.left < sliderLeft.value) {
|
||||
sliderLeft.value = newPosition.left
|
||||
setTimeout(() => (sliderRight.value = newPosition.right), STAGGER_DELAY)
|
||||
} else {
|
||||
sliderRight.value = newPosition.right
|
||||
setTimeout(() => (sliderLeft.value = newPosition.left), STAGGER_DELAY)
|
||||
}
|
||||
|
||||
// Vertical animation - lead with the direction of movement
|
||||
if (newPosition.top < sliderTop.value) {
|
||||
sliderTop.value = newPosition.top
|
||||
setTimeout(() => (sliderBottom.value = newPosition.bottom), STAGGER_DELAY)
|
||||
} else {
|
||||
sliderBottom.value = newPosition.bottom
|
||||
setTimeout(() => (sliderTop.value = newPosition.top), STAGGER_DELAY)
|
||||
}
|
||||
}
|
||||
|
||||
function updateActiveTab() {
|
||||
const { index, isSubpage } = computeActiveIndex()
|
||||
currentActiveIndex.value = index
|
||||
subpageSelected.value = isSubpage
|
||||
|
||||
if (index !== -1) {
|
||||
nextTick(positionSlider)
|
||||
} else {
|
||||
sliderLeft.value = 0
|
||||
sliderRight.value = 0
|
||||
}
|
||||
}
|
||||
|
||||
function startAnimation() {
|
||||
// In navigation mode, elements are NuxtLinks with $el property
|
||||
// In local mode, elements are plain divs
|
||||
const el =
|
||||
props.mode === 'navigation'
|
||||
? tabLinkElements.value[currentActiveIndex.value]?.$el
|
||||
: tabLinkElements.value[currentActiveIndex.value]
|
||||
const initialActive = computeActiveIndex()
|
||||
currentActiveIndex.value = initialActive.index
|
||||
subpageSelected.value = initialActive.isSubpage
|
||||
|
||||
if (!el || !el.offsetParent) return
|
||||
|
||||
const newValues = {
|
||||
left: el.offsetLeft,
|
||||
top: el.offsetTop,
|
||||
right: el.offsetParent.offsetWidth - el.offsetLeft - el.offsetWidth,
|
||||
bottom: el.offsetParent.offsetHeight - el.offsetTop - el.offsetHeight,
|
||||
}
|
||||
|
||||
if (sliderLeft.value === 4 && sliderRight.value === 4) {
|
||||
sliderLeft.value = newValues.left
|
||||
sliderRight.value = newValues.right
|
||||
sliderTop.value = newValues.top
|
||||
sliderBottom.value = newValues.bottom
|
||||
} else {
|
||||
const delay = 200
|
||||
|
||||
if (newValues.left < sliderLeft.value) {
|
||||
sliderLeft.value = newValues.left
|
||||
setTimeout(() => {
|
||||
sliderRight.value = newValues.right
|
||||
}, delay)
|
||||
} else {
|
||||
sliderRight.value = newValues.right
|
||||
setTimeout(() => {
|
||||
sliderLeft.value = newValues.left
|
||||
}, delay)
|
||||
}
|
||||
|
||||
if (newValues.top < sliderTop.value) {
|
||||
sliderTop.value = newValues.top
|
||||
setTimeout(() => {
|
||||
sliderBottom.value = newValues.bottom
|
||||
}, delay)
|
||||
} else {
|
||||
sliderBottom.value = newValues.bottom
|
||||
setTimeout(() => {
|
||||
sliderTop.value = newValues.top
|
||||
}, delay)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
pickLink()
|
||||
})
|
||||
onMounted(updateActiveTab)
|
||||
|
||||
watch(
|
||||
() => [route.path, route.query],
|
||||
() => {
|
||||
if (props.mode === 'navigation') {
|
||||
pickLink()
|
||||
updateActiveTab()
|
||||
}
|
||||
},
|
||||
)
|
||||
@@ -228,19 +282,12 @@ watch(
|
||||
() => props.activeIndex,
|
||||
() => {
|
||||
if (props.mode === 'local') {
|
||||
pickLink()
|
||||
updateActiveTab()
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
watch(
|
||||
() => props.links,
|
||||
() => {
|
||||
// Re-trigger animation when links change
|
||||
pickLink()
|
||||
},
|
||||
{ deep: true },
|
||||
)
|
||||
watch(() => props.links, updateActiveTab, { deep: true })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
@@ -458,9 +458,11 @@ function getMessages() {
|
||||
}
|
||||
|
||||
function getLoaderCategories(ver) {
|
||||
return tags.value.loaders.filter((loader) => {
|
||||
return ver?.loaders?.includes(loader.name)
|
||||
})
|
||||
return tags.value.loaders
|
||||
.filter((loader) => {
|
||||
return ver?.loaders?.includes(loader.name)
|
||||
})
|
||||
.map((loader) => loader.name)
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@@ -91,10 +91,9 @@
|
||||
|
||||
<script>
|
||||
import { CalendarIcon, DownloadIcon, HeartIcon, UpdatedIcon } from '@modrinth/assets'
|
||||
import { Avatar, ProjectStatusBadge, useRelativeTime } from '@modrinth/ui'
|
||||
import { Avatar, Categories, ProjectStatusBadge, useRelativeTime } from '@modrinth/ui'
|
||||
|
||||
import EnvironmentIndicator from '~/components/ui/EnvironmentIndicator.vue'
|
||||
import Categories from '~/components/ui/search/Categories.vue'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
<ButtonStyled color="brand">
|
||||
<button class="brand-button" @click="acceptInvite()">
|
||||
<CheckIcon />
|
||||
{{ getFormattedMessage(messages.accept) }}
|
||||
{{ getFormattedMessage(commonMessages.acceptButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="red">
|
||||
<button @click="declineInvite">
|
||||
<XIcon />
|
||||
{{ getFormattedMessage(messages.decline) }}
|
||||
{{ getFormattedMessage(commonMessages.declineButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
@@ -26,6 +26,7 @@
|
||||
import { CheckIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
injectNotificationManager,
|
||||
type MessageDescriptor,
|
||||
@@ -81,14 +82,6 @@ const messages = defineMessages({
|
||||
defaultMessage:
|
||||
"You've been invited to join this project. Please accept or decline the invitation.",
|
||||
},
|
||||
accept: {
|
||||
id: 'project-member-header.accept',
|
||||
defaultMessage: 'Accept',
|
||||
},
|
||||
decline: {
|
||||
id: 'project-member-header.decline',
|
||||
defaultMessage: 'Decline',
|
||||
},
|
||||
successJoin: {
|
||||
id: 'project-member-header.success-join',
|
||||
defaultMessage: 'You have joined the project team',
|
||||
@@ -105,14 +98,6 @@ const messages = defineMessages({
|
||||
id: 'project-member-header.error-decline',
|
||||
defaultMessage: 'Failed to decline team invitation',
|
||||
},
|
||||
success: {
|
||||
id: 'project-member-header.success',
|
||||
defaultMessage: 'Success',
|
||||
},
|
||||
error: {
|
||||
id: 'project-member-header.error',
|
||||
defaultMessage: 'Error',
|
||||
},
|
||||
})
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
@@ -171,13 +156,13 @@ async function acceptInvite(): Promise<void> {
|
||||
await acceptTeamInvite(props.project.team)
|
||||
await handleUpdateMembers()
|
||||
addNotification({
|
||||
title: formatMessage(messages.success),
|
||||
title: formatMessage(commonMessages.successLabel),
|
||||
text: formatMessage(messages.successJoin),
|
||||
type: 'success',
|
||||
})
|
||||
} catch {
|
||||
addNotification({
|
||||
title: formatMessage(messages.error),
|
||||
title: formatMessage(commonMessages.errorLabel),
|
||||
text: formatMessage(messages.errorJoin),
|
||||
type: 'error',
|
||||
})
|
||||
@@ -192,13 +177,13 @@ async function declineInvite(): Promise<void> {
|
||||
await removeTeamMember(props.project.team, props.auth.user.id)
|
||||
await handleUpdateMembers()
|
||||
addNotification({
|
||||
title: formatMessage(messages.success),
|
||||
title: formatMessage(commonMessages.successLabel),
|
||||
text: formatMessage(messages.successDecline),
|
||||
type: 'success',
|
||||
})
|
||||
} catch {
|
||||
addNotification({
|
||||
title: formatMessage(messages.error),
|
||||
title: formatMessage(commonMessages.errorLabel),
|
||||
text: formatMessage(messages.errorDecline),
|
||||
type: 'error',
|
||||
})
|
||||
|
||||
@@ -46,20 +46,20 @@
|
||||
Node hostnames
|
||||
<span class="text-brand-red">*</span>
|
||||
</span>
|
||||
<span>Add nodes to transfer.</span>
|
||||
<span>Add nodes to transfer (comma or space-separated).</span>
|
||||
</label>
|
||||
<div class="flex items-center gap-2">
|
||||
<input
|
||||
id="node-input"
|
||||
v-model="nodeInput"
|
||||
class="w-40"
|
||||
class="w-64"
|
||||
type="text"
|
||||
autocomplete="off"
|
||||
placeholder="us-vin200"
|
||||
@keydown.enter.prevent="addNode"
|
||||
placeholder="us-vin200, us-vin201"
|
||||
@keydown.enter.prevent="addNodes"
|
||||
/>
|
||||
<ButtonStyled color="blue" color-fill="text">
|
||||
<button class="shrink-0" @click="addNode">
|
||||
<button class="shrink-0" @click="addNodes">
|
||||
<PlusIcon />
|
||||
Add
|
||||
</button>
|
||||
@@ -282,18 +282,37 @@ function hide() {
|
||||
modal.value?.hide()
|
||||
}
|
||||
|
||||
function addNode() {
|
||||
const v = nodeInput.value.trim()
|
||||
if (!v) return
|
||||
if (!nodeHostnames.value.includes(v)) {
|
||||
function addNodes() {
|
||||
const input = nodeInput.value.trim()
|
||||
if (!input) return
|
||||
|
||||
const nodes = input
|
||||
.split(/[,\s]+/)
|
||||
.map((s) => s.trim())
|
||||
.filter((s) => s.length > 0)
|
||||
|
||||
const unknownNodes: string[] = []
|
||||
const addedNodes: string[] = []
|
||||
|
||||
for (const v of nodes) {
|
||||
if (!nodeHostnames.value.includes(v)) {
|
||||
unknownNodes.push(v)
|
||||
continue
|
||||
}
|
||||
if (!selectedNodes.value.includes(v)) {
|
||||
selectedNodes.value.push(v)
|
||||
addedNodes.push(v)
|
||||
}
|
||||
}
|
||||
|
||||
if (unknownNodes.length > 0) {
|
||||
addNotification({
|
||||
title: 'Unknown node',
|
||||
text: "This hostname doesn't exist",
|
||||
title: `Unknown node${unknownNodes.length > 1 ? 's' : ''}`,
|
||||
text: unknownNodes.join(', '),
|
||||
type: 'error',
|
||||
})
|
||||
return
|
||||
}
|
||||
if (!selectedNodes.value.includes(v)) selectedNodes.value.push(v)
|
||||
|
||||
nodeInput.value = ''
|
||||
}
|
||||
|
||||
|
||||
@@ -27,8 +27,8 @@
|
||||
"
|
||||
:style="`--_color: var(--color-platform-${loader.name})`"
|
||||
>
|
||||
<div v-html="loader.icon"></div>
|
||||
{{ formatCategory(loader.name) }}
|
||||
<component :is="getLoaderIcon(loader.name)" v-if="getLoaderIcon(loader.name)" />
|
||||
<FormattedTag :tag="loader.name" enforce-type="loader" />
|
||||
</TagItem>
|
||||
</div>
|
||||
</div>
|
||||
@@ -40,8 +40,8 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import { Chips, TagItem } from '@modrinth/ui'
|
||||
import { formatCategory } from '@modrinth/utils'
|
||||
import { getLoaderIcon } from '@modrinth/assets'
|
||||
import { Chips, FormattedTag, TagItem } from '@modrinth/ui'
|
||||
|
||||
const selectedLoaders = defineModel<string[]>({ default: [] })
|
||||
|
||||
|
||||
+1
-1
@@ -155,7 +155,7 @@ function groupVersions(gameVersions: GameVersion[]) {
|
||||
|
||||
const groups: Record<string, string[]> = {}
|
||||
|
||||
let currentGroupKey = getSnapshotGroupKey(gameVersions.find((v) => v.major)?.version || '')
|
||||
let currentGroupKey
|
||||
|
||||
gameVersions.forEach((gameVersion) => {
|
||||
if (gameVersion.version_type === 'release') {
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
class="border !border-solid border-surface-5 !transition-all hover:bg-button-bgHover hover:no-underline"
|
||||
:style="`--_color: var(--color-platform-${loader.name})`"
|
||||
>
|
||||
<div v-html="loader.icon"></div>
|
||||
{{ formatCategory(loader.name) }}
|
||||
<component :is="getLoaderIcon(loader.name)" v-if="getLoaderIcon(loader.name)" />
|
||||
<FormattedTag :tag="loader.name" enforce-type="loader" />
|
||||
<XIcon class="text-secondary" />
|
||||
</TagItem>
|
||||
</template>
|
||||
@@ -41,9 +41,8 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { XIcon } from '@modrinth/assets'
|
||||
import { ButtonStyled, TagItem } from '@modrinth/ui'
|
||||
import { formatCategory } from '@modrinth/utils'
|
||||
import { getLoaderIcon, XIcon } from '@modrinth/assets'
|
||||
import { ButtonStyled, FormattedTag, TagItem } from '@modrinth/ui'
|
||||
|
||||
import { injectManageVersionContext } from '~/providers/version/manage-version-modal'
|
||||
|
||||
|
||||
@@ -72,8 +72,8 @@
|
||||
class="border !border-solid border-surface-5 hover:no-underline"
|
||||
:style="`--_color: var(--color-platform-${loader.name})`"
|
||||
>
|
||||
<div v-html="loader.icon"></div>
|
||||
{{ formatCategory(loader.name) }}
|
||||
<component :is="getLoaderIcon(loader.name)" v-if="getLoaderIcon(loader.name)" />
|
||||
<FormattedTag :tag="loader.name" enforce-type="loader" />
|
||||
</TagItem>
|
||||
</template>
|
||||
|
||||
@@ -189,16 +189,16 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import { EditIcon, UnknownIcon } from '@modrinth/assets'
|
||||
import { EditIcon, getLoaderIcon, UnknownIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
defineMessages,
|
||||
ENVIRONMENTS_COPY,
|
||||
FormattedTag,
|
||||
injectProjectPageContext,
|
||||
TagItem,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import { formatCategory } from '@modrinth/utils'
|
||||
|
||||
import { useGeneratedState } from '~/composables/generated'
|
||||
import { injectManageVersionContext } from '~/providers/version/manage-version-modal'
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<ButtonStyled class="w-24">
|
||||
<button @click="modal.hide()">
|
||||
<XIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.cancel) }}
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand" class="w-36">
|
||||
@@ -60,6 +60,7 @@
|
||||
import { PlusIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
injectNotificationManager,
|
||||
NewModal,
|
||||
@@ -102,18 +103,10 @@ const messages = defineMessages({
|
||||
defaultMessage:
|
||||
'Your new collection will be created as a public collection with {count, plural, =0 {no projects} one {# project} other {# projects}}.',
|
||||
},
|
||||
cancel: {
|
||||
id: 'create.collection.cancel',
|
||||
defaultMessage: 'Cancel',
|
||||
},
|
||||
createCollection: {
|
||||
id: 'create.collection.create-collection',
|
||||
defaultMessage: 'Create collection',
|
||||
},
|
||||
errorTitle: {
|
||||
id: 'create.collection.error-title',
|
||||
defaultMessage: 'An error occurred',
|
||||
},
|
||||
})
|
||||
|
||||
const name = ref('')
|
||||
@@ -150,7 +143,7 @@ async function create() {
|
||||
await router.push(`/collection/${result.id}`)
|
||||
} catch (err) {
|
||||
addNotification({
|
||||
title: formatMessage(messages.errorTitle),
|
||||
title: formatMessage(commonMessages.errorNotificationTitle),
|
||||
text: err?.data?.description || err?.message || err,
|
||||
type: 'error',
|
||||
})
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<ButtonStyled class="w-24">
|
||||
<button @click="hide">
|
||||
<XIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.cancel) }}
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand" class="w-40">
|
||||
@@ -83,6 +83,7 @@
|
||||
import { PlusIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
injectNotificationManager,
|
||||
NewModal,
|
||||
@@ -130,18 +131,10 @@ const messages = defineMessages({
|
||||
defaultMessage:
|
||||
'You will be the owner of this organization, but you can invite other members and transfer ownership at any time.',
|
||||
},
|
||||
cancel: {
|
||||
id: 'create.organization.cancel',
|
||||
defaultMessage: 'Cancel',
|
||||
},
|
||||
createOrganization: {
|
||||
id: 'create.organization.create-organization',
|
||||
defaultMessage: 'Create organization',
|
||||
},
|
||||
errorTitle: {
|
||||
id: 'create.organization.error-title',
|
||||
defaultMessage: 'An error occurred',
|
||||
},
|
||||
})
|
||||
|
||||
const name = ref<string>('')
|
||||
@@ -172,7 +165,7 @@ async function createOrganization(): Promise<void> {
|
||||
} catch (err: any) {
|
||||
console.error(err)
|
||||
addNotification({
|
||||
title: formatMessage(messages.errorTitle),
|
||||
title: formatMessage(commonMessages.errorNotificationTitle),
|
||||
text: err.data ? err.data.description : err,
|
||||
type: 'error',
|
||||
})
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<div class="flex flex-col gap-2">
|
||||
<label for="visibility" class="flex flex-col gap-1">
|
||||
<span class="text-lg font-semibold text-contrast">
|
||||
{{ formatMessage(messages.visibilityLabel) }}
|
||||
{{ formatMessage(commonMessages.visibilityLabel) }}
|
||||
<span class="text-brand-red">*</span>
|
||||
</span>
|
||||
<span>{{ formatMessage(messages.visibilityDescription) }}</span>
|
||||
@@ -79,7 +79,7 @@
|
||||
<ButtonStyled class="w-24">
|
||||
<button @click="cancel">
|
||||
<XIcon aria-hidden="true" />
|
||||
{{ formatMessage(messages.cancel) }}
|
||||
{{ formatMessage(commonMessages.cancelButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled color="brand" class="w-32">
|
||||
@@ -98,6 +98,7 @@ import { PlusIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
Chips,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
injectNotificationManager,
|
||||
NewModal,
|
||||
@@ -127,10 +128,6 @@ const messages = defineMessages({
|
||||
id: 'create.project.url-label',
|
||||
defaultMessage: 'URL',
|
||||
},
|
||||
visibilityLabel: {
|
||||
id: 'create.project.visibility-label',
|
||||
defaultMessage: 'Visibility',
|
||||
},
|
||||
visibilityDescription: {
|
||||
id: 'create.project.visibility-description',
|
||||
defaultMessage: 'The visibility of your project after it has been approved.',
|
||||
@@ -147,18 +144,10 @@ const messages = defineMessages({
|
||||
id: 'create.project.summary-placeholder',
|
||||
defaultMessage: 'This project adds...',
|
||||
},
|
||||
cancel: {
|
||||
id: 'create.project.cancel',
|
||||
defaultMessage: 'Cancel',
|
||||
},
|
||||
createProject: {
|
||||
id: 'create.project.create-project',
|
||||
defaultMessage: 'Create project',
|
||||
},
|
||||
errorTitle: {
|
||||
id: 'create.project.error-title',
|
||||
defaultMessage: 'An error occurred',
|
||||
},
|
||||
visibilityPublic: {
|
||||
id: 'create.project.visibility-public',
|
||||
defaultMessage: 'Public',
|
||||
@@ -256,7 +245,7 @@ async function createProject() {
|
||||
await router.push(`/project/${slug.value}/settings`)
|
||||
} catch (err) {
|
||||
addNotification({
|
||||
title: formatMessage(messages.errorTitle),
|
||||
title: formatMessage(commonMessages.errorNotificationTitle),
|
||||
text: err.data ? err.data.description : err,
|
||||
type: 'error',
|
||||
})
|
||||
|
||||
@@ -37,7 +37,10 @@
|
||||
v-model="isUSCitizen"
|
||||
:items="['yes', 'no']"
|
||||
:format-label="
|
||||
(item) => (item === 'yes' ? formatMessage(messages.yes) : formatMessage(messages.no))
|
||||
(item) =>
|
||||
item === 'yes'
|
||||
? formatMessage(commonMessages.yesLabel)
|
||||
: formatMessage(commonMessages.noLabel)
|
||||
"
|
||||
:never-empty="false"
|
||||
:capitalize="true"
|
||||
@@ -162,6 +165,7 @@ import {
|
||||
Admonition,
|
||||
ButtonStyled,
|
||||
Chips,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
injectNotificationManager,
|
||||
IntlFormatted,
|
||||
@@ -228,8 +232,6 @@ const messages = defineMessages({
|
||||
id: 'dashboard.creator-tax-form-modal.us-citizen.question',
|
||||
defaultMessage: 'Are you a US citizen?',
|
||||
},
|
||||
yes: { id: 'common.yes', defaultMessage: 'Yes' },
|
||||
no: { id: 'common.no', defaultMessage: 'No' },
|
||||
entityQuestion: {
|
||||
id: 'dashboard.creator-tax-form-modal.entity.question',
|
||||
defaultMessage: 'Are you a private individual or part of a foreign entity?',
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
<div v-if="currentStage === 'completion'" class="mt-4 flex w-full gap-3">
|
||||
<ButtonStyled class="flex-1">
|
||||
<button class="w-full text-contrast" @click="handleClose">
|
||||
{{ formatMessage(messages.closeButton) }}
|
||||
{{ formatMessage(commonMessages.closeButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ButtonStyled class="flex-1">
|
||||
@@ -601,26 +601,10 @@ const messages = defineMessages({
|
||||
id: 'dashboard.creator-withdraw-modal.stage.method-selection',
|
||||
defaultMessage: 'Method',
|
||||
},
|
||||
tremendousDetailsStage: {
|
||||
id: 'dashboard.creator-withdraw-modal.stage.tremendous-details',
|
||||
defaultMessage: 'Details',
|
||||
},
|
||||
muralpayKycStage: {
|
||||
id: 'dashboard.creator-withdraw-modal.stage.muralpay-kyc',
|
||||
defaultMessage: 'Verification',
|
||||
},
|
||||
muralpayDetailsStage: {
|
||||
id: 'dashboard.creator-withdraw-modal.stage.muralpay-details',
|
||||
defaultMessage: 'Account Details',
|
||||
},
|
||||
completionStage: {
|
||||
id: 'dashboard.creator-withdraw-modal.stage.completion',
|
||||
defaultMessage: 'Complete',
|
||||
},
|
||||
detailsLabel: {
|
||||
id: 'dashboard.creator-withdraw-modal.details-label',
|
||||
defaultMessage: 'Details',
|
||||
},
|
||||
completeTaxForm: {
|
||||
id: 'dashboard.creator-withdraw-modal.complete-tax-form',
|
||||
defaultMessage: 'Complete tax form',
|
||||
@@ -629,14 +613,14 @@ const messages = defineMessages({
|
||||
id: 'dashboard.creator-withdraw-modal.continue-with-limit',
|
||||
defaultMessage: 'Continue with limit',
|
||||
},
|
||||
detailsLabel: {
|
||||
id: 'dashboard.creator-withdraw-modal.details-label',
|
||||
defaultMessage: 'Details',
|
||||
},
|
||||
withdrawButton: {
|
||||
id: 'dashboard.creator-withdraw-modal.withdraw-button',
|
||||
defaultMessage: 'Withdraw',
|
||||
},
|
||||
closeButton: {
|
||||
id: 'dashboard.withdraw.completion.close-button',
|
||||
defaultMessage: 'Close',
|
||||
},
|
||||
transactionsButton: {
|
||||
id: 'dashboard.withdraw.completion.transactions-button',
|
||||
defaultMessage: 'Transactions',
|
||||
|
||||
@@ -287,13 +287,5 @@ const messages = defineMessages({
|
||||
defaultMessage:
|
||||
"You'll receive an email at <b>{email}</b> with instructions to redeem your withdrawal.",
|
||||
},
|
||||
closeButton: {
|
||||
id: 'dashboard.withdraw.completion.close-button',
|
||||
defaultMessage: 'Close',
|
||||
},
|
||||
transactionsButton: {
|
||||
id: 'dashboard.withdraw.completion.transactions-button',
|
||||
defaultMessage: 'Transactions',
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
+3
-10
@@ -57,8 +57,8 @@
|
||||
<SaveIcon v-else />
|
||||
{{
|
||||
venmoSaveSuccess
|
||||
? formatMessage(messages.savedButton)
|
||||
: formatMessage(messages.saveButton)
|
||||
? formatMessage(commonMessages.savedLabel)
|
||||
: formatMessage(commonMessages.saveButton)
|
||||
}}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
@@ -107,6 +107,7 @@ import { CheckIcon, PayPalColorIcon, SaveIcon, XIcon } from '@modrinth/assets'
|
||||
import {
|
||||
ButtonStyled,
|
||||
Checkbox,
|
||||
commonMessages,
|
||||
defineMessages,
|
||||
financialMessages,
|
||||
formFieldLabels,
|
||||
@@ -342,14 +343,6 @@ const messages = defineMessages({
|
||||
id: 'dashboard.creator-withdraw-modal.paypal-details.disconnect-account',
|
||||
defaultMessage: 'Disconnect account',
|
||||
},
|
||||
saveButton: {
|
||||
id: 'dashboard.creator-withdraw-modal.paypal-details.save-button',
|
||||
defaultMessage: 'Save',
|
||||
},
|
||||
savedButton: {
|
||||
id: 'dashboard.creator-withdraw-modal.paypal-details.saved-button',
|
||||
defaultMessage: 'Saved',
|
||||
},
|
||||
saveSuccess: {
|
||||
id: 'dashboard.creator-withdraw-modal.paypal-details.save-success',
|
||||
defaultMessage: 'Venmo handle saved successfully!',
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import { ClipboardCopyIcon, LoaderCircleIcon, XIcon } from '@modrinth/assets'
|
||||
import { ClipboardCopyIcon, DownloadIcon, LoaderCircleIcon, XIcon } from '@modrinth/assets'
|
||||
import { ButtonStyled, CopyCode, NewModal } from '@modrinth/ui'
|
||||
import { ref, useTemplateRef } from 'vue'
|
||||
|
||||
@@ -38,15 +38,16 @@ async function fetchVersionHashes(versionIds: string[]) {
|
||||
// TODO: switch to api-client once truman's vers stuff is merged
|
||||
const version = (await useBaseFetch(`version/${versionId}`)) as {
|
||||
files: Array<{
|
||||
id?: string
|
||||
filename: string
|
||||
file_name?: string
|
||||
hashes: { sha512: string; sha1: string }
|
||||
}>
|
||||
}
|
||||
const filesMap = new Map<string, string>()
|
||||
for (const file of version.files) {
|
||||
const name = file.file_name ?? file.filename
|
||||
filesMap.set(name, file.hashes.sha512)
|
||||
if (file.id) {
|
||||
filesMap.set(file.id, file.hashes.sha512)
|
||||
}
|
||||
}
|
||||
versionDataCache.value.set(versionId, { files: filesMap, loading: false })
|
||||
} catch (error) {
|
||||
@@ -60,8 +61,8 @@ async function fetchVersionHashes(versionIds: string[]) {
|
||||
}
|
||||
}
|
||||
|
||||
function getFileHash(versionId: string, fileName: string): string | undefined {
|
||||
return versionDataCache.value.get(versionId)?.files.get(fileName)
|
||||
function getFileHash(versionId: string, fileId: string): string | undefined {
|
||||
return versionDataCache.value.get(versionId)?.files.get(fileId)
|
||||
}
|
||||
|
||||
function isHashLoading(versionId: string): boolean {
|
||||
@@ -114,6 +115,7 @@ defineExpose({ show, hide })
|
||||
<th class="pb-2">Version ID</th>
|
||||
<th class="pb-2">File Name</th>
|
||||
<th class="pb-2">CDN Link</th>
|
||||
<th class="pb-2">Download</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -124,11 +126,11 @@ defineExpose({ show, hide })
|
||||
class="size-4 animate-spin text-secondary"
|
||||
/>
|
||||
<ButtonStyled
|
||||
v-else-if="getFileHash(item.file.version_id, item.file.file_name)"
|
||||
v-else-if="getFileHash(item.file.version_id, item.file.file_id)"
|
||||
size="small"
|
||||
type="standard"
|
||||
>
|
||||
<button @click="copy(getFileHash(item.file.version_id, item.file.file_name)!)">
|
||||
<button @click="copy(getFileHash(item.file.version_id, item.file.file_id)!)">
|
||||
<ClipboardCopyIcon class="size-4" />
|
||||
Copy
|
||||
</button>
|
||||
@@ -141,7 +143,7 @@ defineExpose({ show, hide })
|
||||
<td class="py-1 pr-2">
|
||||
<CopyCode :text="item.file.file_name" />
|
||||
</td>
|
||||
<td class="py-1">
|
||||
<td class="py-1 pr-2">
|
||||
<ButtonStyled size="small" type="standard">
|
||||
<button @click="copy(item.file.download_url)">
|
||||
<ClipboardCopyIcon class="size-4" />
|
||||
@@ -149,6 +151,13 @@ defineExpose({ show, hide })
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
</td>
|
||||
<td class="py-1">
|
||||
<ButtonStyled circular size="small">
|
||||
<a :href="item.file.download_url" :download="item.file.file_name" target="_blank">
|
||||
<DownloadIcon />
|
||||
</a>
|
||||
</ButtonStyled>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -78,6 +78,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { Labrinth } from '@modrinth/api-client'
|
||||
import {
|
||||
AsteriskIcon,
|
||||
ChevronRightIcon,
|
||||
@@ -90,7 +91,6 @@ import {
|
||||
import type { Nag, NagContext, NagStatus } from '@modrinth/moderation'
|
||||
import { nags } from '@modrinth/moderation'
|
||||
import { ButtonStyled, defineMessages, type MessageDescriptor, useVIntl } from '@modrinth/ui'
|
||||
import type { Project, User, Version } from '@modrinth/utils'
|
||||
import type { Component } from 'vue'
|
||||
import { computed } from 'vue'
|
||||
|
||||
@@ -98,16 +98,10 @@ interface Tags {
|
||||
rejectedStatuses: string[]
|
||||
}
|
||||
|
||||
interface Member {
|
||||
accepted?: boolean
|
||||
project_role?: string
|
||||
user?: Partial<User>
|
||||
}
|
||||
|
||||
interface Props {
|
||||
project: Project
|
||||
versions?: Version[]
|
||||
currentMember?: Member | null
|
||||
project: Labrinth.Projects.v2.Project
|
||||
versions?: Labrinth.Versions.v2.Version[]
|
||||
currentMember?: Labrinth.Projects.v3.TeamMember | null
|
||||
collapsed?: boolean
|
||||
routeName?: string
|
||||
tags: Tags
|
||||
@@ -179,7 +173,7 @@ const emit = defineEmits<{
|
||||
const nagContext = computed<NagContext>(() => ({
|
||||
project: props.project,
|
||||
versions: props.versions,
|
||||
currentMember: props.currentMember as User,
|
||||
currentMember: props.currentMember?.user as Labrinth.Users.v2.User,
|
||||
currentRoute: props.routeName,
|
||||
tags: props.tags,
|
||||
submitProject: submitForReview,
|
||||
|
||||
@@ -12,6 +12,7 @@ import {
|
||||
LinkIcon,
|
||||
LoaderCircleIcon,
|
||||
ShieldCheckIcon,
|
||||
TimerIcon,
|
||||
} from '@modrinth/assets'
|
||||
import { type TechReviewContext, techReviewQuickReplies } from '@modrinth/moderation'
|
||||
import {
|
||||
@@ -113,8 +114,8 @@ const quickActions = computed<OverflowMenuOption[]>(() => {
|
||||
navigator.clipboard.writeText(props.item.project.id).then(() => {
|
||||
addNotification({
|
||||
type: 'success',
|
||||
title: 'Technical Report ID copied',
|
||||
text: 'The ID of this report has been copied to your clipboard.',
|
||||
title: 'Project ID copied',
|
||||
text: 'The ID of this project has been copied to your clipboard.',
|
||||
})
|
||||
})
|
||||
},
|
||||
@@ -265,6 +266,13 @@ const severityColor = computed(() => {
|
||||
}
|
||||
})
|
||||
|
||||
const isProjectApproved = computed(() => {
|
||||
const status = props.item.project.status
|
||||
return (
|
||||
status === 'approved' || status === 'archived' || status === 'unlisted' || status === 'private'
|
||||
)
|
||||
})
|
||||
|
||||
const formattedDate = computed(() => {
|
||||
const dates = props.item.reports.map((r) => new Date(r.created))
|
||||
const earliest = new Date(Math.min(...dates.map((d) => d.getTime())))
|
||||
@@ -369,12 +377,16 @@ async function updateDetailStatus(detailId: string, verdict: 'safe' | 'unsafe')
|
||||
if (detailKey) break
|
||||
}
|
||||
|
||||
let otherMatchedCount = 0
|
||||
if (detailKey) {
|
||||
for (const report of props.item.reports) {
|
||||
for (const issue of report.issues) {
|
||||
for (const detail of issue.details) {
|
||||
if (detail.key === detailKey) {
|
||||
detailDecisions.value.set(detail.id, decision)
|
||||
if (detail.id !== detailId) {
|
||||
otherMatchedCount++
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -391,17 +403,31 @@ async function updateDetailStatus(detailId: string, verdict: 'safe' | 'unsafe')
|
||||
}
|
||||
}
|
||||
|
||||
// Jump back to Files tab when all flags in the current file are marked
|
||||
if (selectedFile.value) {
|
||||
const markedCount = getFileMarkedCount(selectedFile.value)
|
||||
const totalCount = getFileDetailCount(selectedFile.value)
|
||||
if (markedCount === totalCount) {
|
||||
backToFileList()
|
||||
}
|
||||
}
|
||||
|
||||
const otherText =
|
||||
otherMatchedCount > 0
|
||||
? ` (${otherMatchedCount} other trace${otherMatchedCount === 1 ? '' : 's'} also marked)`
|
||||
: ''
|
||||
|
||||
if (verdict === 'safe') {
|
||||
addNotification({
|
||||
type: 'success',
|
||||
title: 'Issue marked as pass',
|
||||
text: 'This issue has been marked as a false positive.',
|
||||
text: `This issue has been marked as a false positive.${otherText}`,
|
||||
})
|
||||
} else {
|
||||
addNotification({
|
||||
type: 'success',
|
||||
title: 'Issue marked as fail',
|
||||
text: 'This issue has been flagged as malicious.',
|
||||
text: `This issue has been flagged as malicious.${otherText}`,
|
||||
})
|
||||
}
|
||||
} catch (error) {
|
||||
@@ -472,6 +498,17 @@ const groupedByClass = computed<ClassGroup[]>(() => {
|
||||
})
|
||||
})
|
||||
|
||||
// Auto-expand if there's only one class in the file
|
||||
watch(
|
||||
groupedByClass,
|
||||
(classes) => {
|
||||
if (classes.length === 1) {
|
||||
expandedClasses.value.add(classes[0].filePath)
|
||||
}
|
||||
},
|
||||
{ immediate: true },
|
||||
)
|
||||
|
||||
function getHighestSeverityInClass(
|
||||
flags: ClassGroup['flags'],
|
||||
): Labrinth.TechReview.Internal.DelphiSeverity {
|
||||
@@ -623,7 +660,7 @@ const threadWithPreview = computed(() => {
|
||||
body: {
|
||||
type: 'text',
|
||||
body: reviewSummaryPreview.value,
|
||||
private: false,
|
||||
private: true,
|
||||
replying_to: null,
|
||||
associated_images: [],
|
||||
},
|
||||
@@ -747,9 +784,21 @@ async function handleSubmitReview(verdict: 'safe' | 'unsafe') {
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="rounded-full border border-solid border-surface-5 bg-surface-4 px-2.5 py-1"
|
||||
class="flex items-center gap-1 rounded-full border border-solid px-2.5 py-1"
|
||||
:class="
|
||||
isProjectApproved
|
||||
? 'border-green bg-highlight-green'
|
||||
: 'border-orange bg-highlight-orange'
|
||||
"
|
||||
>
|
||||
<span class="text-sm font-medium text-secondary">Auto-Flagged</span>
|
||||
<CheckIcon v-if="isProjectApproved" aria-hidden="true" class="h-4 w-4 text-green" />
|
||||
<TimerIcon v-else aria-hidden="true" class="h-4 w-4 text-orange" />
|
||||
<span
|
||||
class="text-sm font-medium"
|
||||
:class="isProjectApproved ? 'text-green' : 'text-orange'"
|
||||
>
|
||||
{{ isProjectApproved ? 'Live' : 'In review' }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="rounded-full px-2.5 py-1" :class="severityColor">
|
||||
@@ -929,8 +978,6 @@ async function handleSubmitReview(verdict: 'safe' | 'unsafe') {
|
||||
:href="file.download_url"
|
||||
:title="`Download ${file.file_name}`"
|
||||
:download="file.file_name"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="!border-px !border-surface-4"
|
||||
tabindex="0"
|
||||
>
|
||||
@@ -1008,15 +1055,21 @@ async function handleSubmitReview(verdict: 'safe' | 'unsafe') {
|
||||
v-for="flag in classItem.flags"
|
||||
:key="`${flag.issueId}-${flag.detail.id}`"
|
||||
class="grid grid-cols-[1fr_auto_auto] items-center rounded-lg border-[1px] border-b border-solid border-surface-5 bg-surface-3 py-2 pl-4 last:border-b-0"
|
||||
:class="{
|
||||
'opacity-50': isPreReviewed(flag.detail.id, flag.detail.status),
|
||||
}"
|
||||
>
|
||||
<span class="text-base font-semibold text-contrast">{{
|
||||
flag.issueType.replace(/_/g, ' ')
|
||||
}}</span>
|
||||
<span
|
||||
class="text-base font-semibold text-contrast"
|
||||
:class="{
|
||||
'opacity-50': isPreReviewed(flag.detail.id, flag.detail.status),
|
||||
}"
|
||||
>{{ flag.issueType.replace(/_/g, ' ') }}</span
|
||||
>
|
||||
|
||||
<div class="flex w-20 justify-center">
|
||||
<div
|
||||
class="flex w-20 justify-center"
|
||||
:class="{
|
||||
'opacity-50': isPreReviewed(flag.detail.id, flag.detail.status),
|
||||
}"
|
||||
>
|
||||
<div
|
||||
class="rounded-full border-solid px-2.5 py-1"
|
||||
:class="getSeverityBadgeColor(flag.detail.severity)"
|
||||
|
||||
@@ -692,17 +692,23 @@ const emit = defineEmits<{
|
||||
|
||||
async function handleExit() {
|
||||
// Release if we own the lock, or if there was an error checking (we might still own it)
|
||||
if (lockStatus.value?.isOwnLock || lockError.value) {
|
||||
const released = await moderationStore.releaseLock(projectV2.value.id)
|
||||
const projectId = projectV2.value?.id
|
||||
if (projectId && (lockStatus.value?.isOwnLock || lockError.value)) {
|
||||
const released = await moderationStore.releaseLock(projectId)
|
||||
if (!released && lockStatus.value?.isOwnLock) {
|
||||
console.warn('Failed to release moderation lock for project:', projectV2.value.id)
|
||||
console.warn('Failed to release moderation lock for project:', projectId)
|
||||
}
|
||||
}
|
||||
emit('exit')
|
||||
}
|
||||
|
||||
async function retryAcquireLock() {
|
||||
const result = await moderationStore.acquireLock(projectV2.value.id)
|
||||
const projectId = projectV2.value?.id
|
||||
if (!projectId) {
|
||||
console.warn('[retryAcquireLock] No project ID available')
|
||||
return
|
||||
}
|
||||
const result = await moderationStore.acquireLock(projectId)
|
||||
|
||||
if (result.success) {
|
||||
handleLockAcquired()
|
||||
@@ -790,6 +796,8 @@ async function maintainPrefetchQueue() {
|
||||
if (isPrefetching.value) return
|
||||
if (!moderationStore.isQueueMode) return
|
||||
|
||||
const currentProjectId = projectV2.value?.id
|
||||
|
||||
isPrefetching.value = true
|
||||
|
||||
try {
|
||||
@@ -798,7 +806,9 @@ async function maintainPrefetchQueue() {
|
||||
prefetchQueue.value = prefetchQueue.value.filter((p) => now - p.validatedAt < PREFETCH_STALE_MS)
|
||||
|
||||
// 2. Remove entries for current project
|
||||
prefetchQueue.value = prefetchQueue.value.filter((p) => p.projectId !== projectV2.value.id)
|
||||
if (currentProjectId) {
|
||||
prefetchQueue.value = prefetchQueue.value.filter((p) => p.projectId !== currentProjectId)
|
||||
}
|
||||
|
||||
// 3. If queue is full enough, exit early
|
||||
if (prefetchQueue.value.length >= PREFETCH_TARGET_COUNT) {
|
||||
@@ -808,7 +818,7 @@ async function maintainPrefetchQueue() {
|
||||
// 4. Get remaining queue items (excluding current and already prefetched)
|
||||
const prefetchedIds = new Set(prefetchQueue.value.map((p) => p.projectId))
|
||||
const queueItems = [...moderationStore.currentQueue.items]
|
||||
const currentIndex = queueItems.indexOf(projectV2.value.id)
|
||||
const currentIndex = currentProjectId ? queueItems.indexOf(currentProjectId) : -1
|
||||
const remainingItems =
|
||||
currentIndex >= 0 ? queueItems.slice(currentIndex + 1) : queueItems.slice(1)
|
||||
|
||||
@@ -873,7 +883,11 @@ const MAX_SKIP_ATTEMPTS = 10
|
||||
|
||||
async function skipToNextProject() {
|
||||
// Skip the current project
|
||||
const currentProjectId = projectV2.value.id
|
||||
const currentProjectId = projectV2.value?.id
|
||||
if (!currentProjectId) {
|
||||
console.warn('[skipToNextProject] No current project ID, aborting')
|
||||
return
|
||||
}
|
||||
debug('[skipToNextProject] Starting. Current project:', currentProjectId)
|
||||
debug('[skipToNextProject] Queue before complete:', [...moderationStore.currentQueue.items])
|
||||
|
||||
@@ -1822,16 +1836,30 @@ function generateModpackMessage(allFiles: {
|
||||
|
||||
const hasNextProject = ref(false)
|
||||
async function sendMessage(status: ProjectStatus) {
|
||||
// Capture project data upfront to avoid null issues during async operations
|
||||
const projectId = projectV2.value?.id
|
||||
const threadId = projectV2.value?.thread_id
|
||||
const projectType = projectV2.value?.project_type
|
||||
|
||||
if (!projectId) {
|
||||
addNotification({
|
||||
title: 'Error submitting moderation',
|
||||
text: 'Project data unavailable. Please try again.',
|
||||
type: 'error',
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
await useBaseFetch(`project/${projectV2.value.id}`, {
|
||||
await useBaseFetch(`project/${projectId}`, {
|
||||
method: 'PATCH',
|
||||
body: {
|
||||
status,
|
||||
},
|
||||
})
|
||||
|
||||
if (message.value) {
|
||||
await useBaseFetch(`thread/${projectV2.value.thread_id}`, {
|
||||
if (message.value && threadId) {
|
||||
await useBaseFetch(`thread/${threadId}`, {
|
||||
method: 'POST',
|
||||
body: {
|
||||
body: {
|
||||
@@ -1842,10 +1870,7 @@ async function sendMessage(status: ProjectStatus) {
|
||||
})
|
||||
}
|
||||
|
||||
if (
|
||||
projectV2.value.project_type === 'modpack' &&
|
||||
Object.keys(modpackJudgements.value).length > 0
|
||||
) {
|
||||
if (projectType === 'modpack' && Object.keys(modpackJudgements.value).length > 0) {
|
||||
await useBaseFetch(`moderation/project`, {
|
||||
internal: true,
|
||||
method: 'POST',
|
||||
@@ -1853,12 +1878,16 @@ async function sendMessage(status: ProjectStatus) {
|
||||
})
|
||||
}
|
||||
|
||||
const willHaveNext = moderationStore.completeCurrentProject(projectId, 'completed')
|
||||
|
||||
moderationStore.releaseLock(projectId).catch((err) => {
|
||||
console.warn('Failed to release lock:', err)
|
||||
})
|
||||
|
||||
// Set both states together - hasNextProject MUST be set before done
|
||||
// to avoid the race condition where done=true renders with hasNextProject=false
|
||||
hasNextProject.value = willHaveNext
|
||||
done.value = true
|
||||
|
||||
// Release the lock after successful submission
|
||||
await moderationStore.releaseLock(projectV2.value.id)
|
||||
|
||||
hasNextProject.value = moderationStore.completeCurrentProject(projectV2.value.id, 'completed')
|
||||
} catch (error) {
|
||||
console.error('Error submitting moderation:', error)
|
||||
addNotification({
|
||||
@@ -1900,7 +1929,7 @@ async function endChecklist(status?: string) {
|
||||
if (!(await navigateToNextUnlockedProject())) {
|
||||
// Fallback: batch check remaining projects with metadata
|
||||
const remainingIds: string[] = []
|
||||
const currentProjectId = projectV2.value.id
|
||||
const currentProjectId = projectV2.value?.id
|
||||
const queueItems = moderationStore.currentQueue.items
|
||||
|
||||
// Build list of remaining projects, excluding current
|
||||
@@ -1971,10 +2000,21 @@ async function endChecklist(status?: string) {
|
||||
}
|
||||
|
||||
async function skipCurrentProject() {
|
||||
// Release the lock before skipping
|
||||
await moderationStore.releaseLock(projectV2.value.id)
|
||||
const projectId = projectV2.value?.id
|
||||
if (!projectId) {
|
||||
addNotification({
|
||||
title: 'Error skipping project',
|
||||
text: 'Project data unavailable. Please try again.',
|
||||
type: 'error',
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
hasNextProject.value = moderationStore.completeCurrentProject(projectV2.value.id, 'skipped')
|
||||
moderationStore.releaseLock(projectId).catch((err) => {
|
||||
console.warn('Failed to release lock:', err)
|
||||
})
|
||||
|
||||
hasNextProject.value = moderationStore.completeCurrentProject(projectId, 'skipped')
|
||||
|
||||
await endChecklist('skipped')
|
||||
}
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
<template>
|
||||
<div class="categories">
|
||||
<slot />
|
||||
<span
|
||||
v-for="category in categoriesFiltered"
|
||||
:key="category.name"
|
||||
v-html="category.icon + formatCategory(category.name)"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { formatCategory } from '@modrinth/utils'
|
||||
|
||||
export default {
|
||||
props: {
|
||||
categories: {
|
||||
type: Array,
|
||||
default() {
|
||||
return []
|
||||
},
|
||||
},
|
||||
type: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
setup() {
|
||||
const tags = useGeneratedState()
|
||||
|
||||
return { tags }
|
||||
},
|
||||
computed: {
|
||||
categoriesFiltered() {
|
||||
return this.tags.categories
|
||||
.concat(this.tags.loaders)
|
||||
.filter(
|
||||
(x) =>
|
||||
this.categories.includes(x.name) && (!x.project_type || x.project_type === this.type),
|
||||
)
|
||||
},
|
||||
},
|
||||
methods: { formatCategory },
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.categories {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
|
||||
:deep(span) {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: row;
|
||||
|
||||
&:not(:last-child) {
|
||||
margin-right: var(--spacing-card-md);
|
||||
}
|
||||
|
||||
&:not(.badge) {
|
||||
color: var(--color-icon);
|
||||
}
|
||||
|
||||
svg {
|
||||
width: 1rem;
|
||||
margin-right: 0.2rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -132,17 +132,23 @@
|
||||
:loader="'Vanilla'"
|
||||
class="size-5 flex-none"
|
||||
/>
|
||||
<svg
|
||||
v-else
|
||||
<component
|
||||
:is="getLoaderIcon(filtersRef.selectedPlatforms[0])"
|
||||
v-else-if="
|
||||
filtersRef?.selectedPlatforms[0] && getLoaderIcon(filtersRef.selectedPlatforms[0])
|
||||
"
|
||||
class="size-5 flex-none"
|
||||
v-html="tags.loaders.find((x) => x.name === filtersRef?.selectedPlatforms[0])?.icon"
|
||||
></svg>
|
||||
/>
|
||||
|
||||
<div class="w-full truncate text-left">
|
||||
{{
|
||||
filtersRef?.selectedPlatforms.length === 0
|
||||
? 'All platforms'
|
||||
: filtersRef?.selectedPlatforms.map((x) => formatCategory(x)).join(', ')
|
||||
: filtersRef?.selectedPlatforms
|
||||
.map((x) => {
|
||||
return formatLoader(formatMessage, x)
|
||||
})
|
||||
.join(', ')
|
||||
}}
|
||||
</div>
|
||||
</template>
|
||||
@@ -242,6 +248,7 @@ import {
|
||||
DropdownIcon,
|
||||
ExternalIcon,
|
||||
GameIcon,
|
||||
getLoaderIcon,
|
||||
LockOpenIcon,
|
||||
XIcon,
|
||||
} from '@modrinth/assets'
|
||||
@@ -252,10 +259,12 @@ import {
|
||||
Checkbox,
|
||||
Combobox,
|
||||
CopyCode,
|
||||
formatLoader,
|
||||
NewModal,
|
||||
TagItem,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
import TagItem from '@modrinth/ui/src/components/base/TagItem.vue'
|
||||
import { formatCategory, formatVersionsForDisplay, type Mod, type Version } from '@modrinth/utils'
|
||||
import { formatVersionsForDisplay, type Mod, type Version } from '@modrinth/utils'
|
||||
import { computed, ref } from 'vue'
|
||||
|
||||
import Accordion from '~/components/ui/Accordion.vue'
|
||||
@@ -265,6 +274,8 @@ import ContentVersionFilter, {
|
||||
} from '~/components/ui/servers/ContentVersionFilter.vue'
|
||||
import LoaderIcon from '~/components/ui/servers/icons/LoaderIcon.vue'
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const props = defineProps<{
|
||||
type: 'Mod' | 'Plugin'
|
||||
loader: string
|
||||
@@ -424,7 +435,7 @@ const formattedVersions = computed(() => {
|
||||
if (secondLoaderPosition === -1) return -1
|
||||
return firstLoaderPosition - secondLoaderPosition
|
||||
})
|
||||
.map((loader: string) => formatCategory(loader)),
|
||||
.map((loader: string) => formatLoader(formatMessage, loader)),
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
Platform
|
||||
</slot>
|
||||
<template #option="{ option }">
|
||||
{{ formatCategory(option) }}
|
||||
{{ formatLoader(formatMessage, String(option)) }}
|
||||
</template>
|
||||
<template v-if="hasAnyUnsupportedPlatforms" #footer>
|
||||
<Checkbox
|
||||
@@ -58,12 +58,15 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FilterIcon } from '@modrinth/assets'
|
||||
import { formatLoader, useVIntl } from '@modrinth/ui'
|
||||
import Checkbox from '@modrinth/ui/src/components/base/Checkbox.vue'
|
||||
import ManySelect from '@modrinth/ui/src/components/base/ManySelect.vue'
|
||||
import { formatCategory, type GameVersionTag, type Version } from '@modrinth/utils'
|
||||
import type { GameVersionTag, Version } from '@modrinth/utils'
|
||||
import { computed, ref } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
export type ListedGameVersion = {
|
||||
name: string
|
||||
release: boolean
|
||||
@@ -119,7 +122,7 @@ const hasOnlyUnsupportedPlatforms = computed(() => {
|
||||
|
||||
const showSupportedPlatformsOnly = ref(true)
|
||||
|
||||
const filterOptions = computed(() => {
|
||||
const filterOptions = computed<Record<'gameVersion' | 'platform', string[]>>(() => {
|
||||
const filters: Record<'gameVersion' | 'platform', string[]> = {
|
||||
gameVersion: [],
|
||||
platform: [],
|
||||
|
||||
@@ -237,7 +237,7 @@ function navigateToFolder() {
|
||||
const newPath = currentPath.endsWith('/')
|
||||
? `${currentPath}${props.name}`
|
||||
: `${currentPath}/${props.name}`
|
||||
router.push({ query: { path: newPath, page: 1 } })
|
||||
router.push({ query: { path: newPath } })
|
||||
}
|
||||
|
||||
const isNavigating = ref(false)
|
||||
|
||||
@@ -32,12 +32,7 @@
|
||||
<label class="w-full text-lg font-bold text-contrast" for="modpack-hard-reset">
|
||||
Erase all data
|
||||
</label>
|
||||
<input
|
||||
id="modpack-hard-reset"
|
||||
v-model="hardReset"
|
||||
class="switch stylized-toggle shrink-0"
|
||||
type="checkbox"
|
||||
/>
|
||||
<Toggle id="modpack-hard-reset" v-model="hardReset" class="shrink-0" />
|
||||
</div>
|
||||
<div>
|
||||
If enabled, existing mods, worlds, and configurations, will be deleted before installing
|
||||
@@ -69,7 +64,7 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { DownloadIcon, XIcon } from '@modrinth/assets'
|
||||
import { ButtonStyled, Combobox, injectNotificationManager, NewModal } from '@modrinth/ui'
|
||||
import { ButtonStyled, Combobox, injectNotificationManager, NewModal, Toggle } from '@modrinth/ui'
|
||||
import { ModrinthServersFetchError } from '@modrinth/utils'
|
||||
|
||||
import type { ModrinthServer } from '~/composables/servers/modrinth-servers.ts'
|
||||
@@ -158,9 +153,3 @@ const hide = () => modal.value?.hide()
|
||||
|
||||
defineExpose({ show, hide })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.stylized-toggle:checked::after {
|
||||
background: var(--color-accent-contrast) !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -53,12 +53,7 @@
|
||||
<label class="w-full text-lg font-bold text-contrast" for="hard-reset">
|
||||
Erase all data
|
||||
</label>
|
||||
<input
|
||||
id="hard-reset"
|
||||
v-model="hardReset"
|
||||
class="switch stylized-toggle shrink-0"
|
||||
type="checkbox"
|
||||
/>
|
||||
<Toggle id="hard-reset" v-model="hardReset" class="shrink-0" />
|
||||
</div>
|
||||
<div>
|
||||
Removes all data on your server, including your worlds, mods, and configuration
|
||||
@@ -128,6 +123,7 @@ import {
|
||||
ButtonStyled,
|
||||
injectNotificationManager,
|
||||
NewModal,
|
||||
Toggle,
|
||||
} from '@modrinth/ui'
|
||||
import { ModrinthServersFetchError } from '@modrinth/utils'
|
||||
import { onMounted, onUnmounted } from 'vue'
|
||||
@@ -255,9 +251,3 @@ const hide = () => mrpackModal.value?.hide()
|
||||
|
||||
defineExpose({ show, hide })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.stylized-toggle:checked::after {
|
||||
background: var(--color-accent-contrast) !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -143,12 +143,7 @@
|
||||
<label class="w-full text-lg font-bold text-contrast" for="hard-reset">
|
||||
Erase all data
|
||||
</label>
|
||||
<input
|
||||
id="hard-reset"
|
||||
v-model="hardReset"
|
||||
class="switch stylized-toggle shrink-0"
|
||||
type="checkbox"
|
||||
/>
|
||||
<Toggle id="hard-reset" v-model="hardReset" class="shrink-0" />
|
||||
</div>
|
||||
<div>
|
||||
Removes all data on your server, including your worlds, mods, and configuration files,
|
||||
@@ -542,9 +537,3 @@ const hide = () => versionSelectModal.value?.hide()
|
||||
|
||||
defineExpose({ show, hide })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.stylized-toggle:checked::after {
|
||||
background: var(--color-accent-contrast) !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -274,10 +274,6 @@ watch(
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.stylized-toggle:checked::after {
|
||||
background: var(--color-accent-contrast) !important;
|
||||
}
|
||||
|
||||
.button-base:active {
|
||||
scale: none !important;
|
||||
}
|
||||
|
||||
@@ -1,22 +1,15 @@
|
||||
<template>
|
||||
<div v-if="loaderData?.icon" v-html="loaderData.icon" />
|
||||
<component :is="icon" v-if="icon" />
|
||||
<LoaderIcon v-else />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { LoaderIcon } from '@modrinth/assets'
|
||||
import { getLoaderIcon, LoaderIcon } from '@modrinth/assets'
|
||||
import { computed } from 'vue'
|
||||
|
||||
import { useGeneratedState } from '~/composables/generated'
|
||||
|
||||
const props = defineProps<{
|
||||
loader: string
|
||||
}>()
|
||||
|
||||
const tags = useGeneratedState()
|
||||
|
||||
// Find the loader by name (case-insensitive comparison)
|
||||
const loaderData = computed(() =>
|
||||
tags.value.loaders.find((l) => l.name.toLowerCase() === props.loader.toLowerCase()),
|
||||
)
|
||||
const icon = computed(() => getLoaderIcon(props.loader))
|
||||
</script>
|
||||
|
||||
@@ -10,12 +10,14 @@
|
||||
<MedalIcon class="h-8 w-auto text-contrast md:h-10" />
|
||||
<div class="flex flex-col items-start gap-1">
|
||||
<span>
|
||||
Try a free
|
||||
<span class="text-medal-orange">3GB server</span> for 5 days powered by
|
||||
<span class="text-medal-orange">Medal</span>
|
||||
<IntlFormatted :message-id="messages.info">
|
||||
<template #orange="{ children }">
|
||||
<span class="text-medal-orange"><component :is="() => children" /></span>
|
||||
</template>
|
||||
</IntlFormatted>
|
||||
</span>
|
||||
<span class="text-xs font-medium text-secondary md:text-sm">
|
||||
Limited-time offer. No credit card required. Available for US servers.
|
||||
{{ formatMessage(messages.textSecondary) }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -23,7 +25,7 @@
|
||||
<nuxt-link
|
||||
to="https://medal.tv/modrinth"
|
||||
class="z-10 flex w-full items-center justify-center gap-1 md:mt-0 md:w-auto"
|
||||
>Learn more <ExternalIcon
|
||||
>{{ formatMessage(messages.learnMoreButton) }} <ExternalIcon
|
||||
/></nuxt-link>
|
||||
</ButtonStyled>
|
||||
</div>
|
||||
@@ -31,9 +33,33 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ExternalIcon } from '@modrinth/assets'
|
||||
import { ButtonStyled, MedalBackgroundImage } from '@modrinth/ui'
|
||||
import {
|
||||
ButtonStyled,
|
||||
defineMessages,
|
||||
IntlFormatted,
|
||||
MedalBackgroundImage,
|
||||
useVIntl,
|
||||
} from '@modrinth/ui'
|
||||
|
||||
import MedalIcon from '~/assets/images/illustrations/medal_icon.svg?component'
|
||||
|
||||
const { formatMessage } = useVIntl()
|
||||
|
||||
const messages = defineMessages({
|
||||
info: {
|
||||
id: 'hosting-marketing.medal.info',
|
||||
defaultMessage:
|
||||
'Try a free <orange>3GB server</orange> for 5 days powered by <orange>Medal</orange>',
|
||||
},
|
||||
textSecondary: {
|
||||
id: 'hosting-marketing.medal.text-secondary',
|
||||
defaultMessage: 'Limited-time offer. No credit card required. Available for US servers.',
|
||||
},
|
||||
learnMoreButton: {
|
||||
id: 'hosting-marketing.medal.learn-more',
|
||||
defaultMessage: 'Learn more',
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script setup lang="ts">
|
||||
import type { MessageDescriptor } from '@modrinth/ui'
|
||||
import { ButtonStyled, defineMessage, ServersSpecs, useVIntl } from '@modrinth/ui'
|
||||
import { ButtonStyled, defineMessage, defineMessages, ServersSpecs, useVIntl } from '@modrinth/ui'
|
||||
import { formatPrice } from '@modrinth/utils'
|
||||
|
||||
const { formatMessage, locale } = useVIntl()
|
||||
@@ -11,6 +11,17 @@ const emit = defineEmits<{
|
||||
|
||||
type Plan = 'small' | 'medium' | 'large'
|
||||
|
||||
const messages = defineMessages({
|
||||
outOfStock: {
|
||||
id: 'hosting.plan.out-of-stock',
|
||||
defaultMessage: 'Out of stock',
|
||||
},
|
||||
selectPlanButton: {
|
||||
id: 'hosting.plan.select-plan',
|
||||
defaultMessage: 'Select plan',
|
||||
},
|
||||
})
|
||||
|
||||
const plans: Record<
|
||||
Plan,
|
||||
{
|
||||
@@ -134,8 +145,12 @@ const billingMonths = computed(() => {
|
||||
:type="plans[plan].mostPopular ? 'standard' : 'highlight-colored-text'"
|
||||
size="large"
|
||||
>
|
||||
<span v-if="outOfStock" class="button-like disabled"> Out of Stock </span>
|
||||
<button v-else @click="() => emit('select')">Select plan</button>
|
||||
<span v-if="outOfStock" class="button-like disabled">{{
|
||||
formatMessage(messages.outOfStock)
|
||||
}}</span>
|
||||
<button v-else @click="() => emit('select')">
|
||||
{{ formatMessage(messages.selectPlanButton) }}
|
||||
</button>
|
||||
</ButtonStyled>
|
||||
<ServersSpecs
|
||||
:ram="ram"
|
||||
|
||||
@@ -323,6 +323,57 @@ export const scopeMessages = defineMessages({
|
||||
},
|
||||
})
|
||||
|
||||
export const scopeCategoryMessages = defineMessages({
|
||||
categoryUserAccount: {
|
||||
id: 'scopes.category.user-account',
|
||||
defaultMessage: 'User account',
|
||||
},
|
||||
categoryProjects: {
|
||||
id: 'scopes.category.projects',
|
||||
defaultMessage: 'Projects',
|
||||
},
|
||||
categoryVersions: {
|
||||
id: 'scopes.category.versions',
|
||||
defaultMessage: 'Versions',
|
||||
},
|
||||
categoryCollections: {
|
||||
id: 'scopes.category.collections',
|
||||
defaultMessage: 'Collections',
|
||||
},
|
||||
categoryOrganizations: {
|
||||
id: 'scopes.category.organizations',
|
||||
defaultMessage: 'Organizations',
|
||||
},
|
||||
categoryReports: {
|
||||
id: 'scopes.category.reports',
|
||||
defaultMessage: 'Reports',
|
||||
},
|
||||
categoryThreads: {
|
||||
id: 'scopes.category.threads',
|
||||
defaultMessage: 'Threads',
|
||||
},
|
||||
categoryPats: {
|
||||
id: 'scopes.category.pats',
|
||||
defaultMessage: 'PATs',
|
||||
},
|
||||
categorySessions: {
|
||||
id: 'scopes.category.sessions',
|
||||
defaultMessage: 'Sessions',
|
||||
},
|
||||
categoryNotifications: {
|
||||
id: 'scopes.category.notifications',
|
||||
defaultMessage: 'Notifications',
|
||||
},
|
||||
categoryPayouts: {
|
||||
id: 'scopes.category.payouts',
|
||||
defaultMessage: 'Payouts',
|
||||
},
|
||||
categoryAnalytics: {
|
||||
id: 'scopes.category.analytics',
|
||||
defaultMessage: 'Analytics',
|
||||
},
|
||||
})
|
||||
|
||||
const scopeDefinitions = [
|
||||
{
|
||||
id: 'USER_READ_EMAIL',
|
||||
|
||||
@@ -55,5 +55,8 @@ export const useBaseFetch = async (url, options = {}, skipAuth = false) => {
|
||||
delete options.apiVersion
|
||||
}
|
||||
|
||||
return await $fetch(`${base}${url}`, options)
|
||||
return await $fetch(`${base}${url}`, {
|
||||
timeout: import.meta.server ? 10000 : undefined,
|
||||
...options,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
import type { AbstractModrinthClient } from '@modrinth/api-client'
|
||||
|
||||
const STALE_TIME = 1000 * 60 * 5 // 5 minutes
|
||||
|
||||
export const projectQueryOptions = {
|
||||
v2: (projectId: string, client: AbstractModrinthClient) => ({
|
||||
queryKey: ['project', 'v2', projectId] as const,
|
||||
queryFn: () => client.labrinth.projects_v2.get(projectId),
|
||||
staleTime: STALE_TIME,
|
||||
}),
|
||||
|
||||
v3: (projectId: string, client: AbstractModrinthClient) => ({
|
||||
queryKey: ['project', 'v3', projectId] as const,
|
||||
queryFn: () => client.labrinth.projects_v3.get(projectId),
|
||||
staleTime: STALE_TIME,
|
||||
}),
|
||||
|
||||
members: (projectId: string, client: AbstractModrinthClient) => ({
|
||||
queryKey: ['project', projectId, 'members'] as const,
|
||||
queryFn: () => client.labrinth.projects_v3.getMembers(projectId),
|
||||
staleTime: STALE_TIME,
|
||||
}),
|
||||
|
||||
dependencies: (projectId: string, client: AbstractModrinthClient) => ({
|
||||
queryKey: ['project', projectId, 'dependencies'] as const,
|
||||
queryFn: () => client.labrinth.projects_v2.getDependencies(projectId),
|
||||
staleTime: STALE_TIME,
|
||||
}),
|
||||
|
||||
versionsV2: (projectId: string, client: AbstractModrinthClient) => ({
|
||||
queryKey: ['project', projectId, 'versions', 'v2'] as const,
|
||||
queryFn: () =>
|
||||
client.labrinth.versions_v3.getProjectVersions(projectId, { include_changelog: false }),
|
||||
staleTime: STALE_TIME,
|
||||
}),
|
||||
|
||||
versionsV3: (projectId: string, client: AbstractModrinthClient) => ({
|
||||
queryKey: ['project', projectId, 'versions', 'v3'] as const,
|
||||
queryFn: () =>
|
||||
client.labrinth.versions_v3.getProjectVersions(projectId, {
|
||||
include_changelog: false,
|
||||
apiVersion: 3,
|
||||
}),
|
||||
staleTime: STALE_TIME,
|
||||
}),
|
||||
|
||||
organization: (projectId: string, client: AbstractModrinthClient) => ({
|
||||
queryKey: ['project', projectId, 'organization'] as const,
|
||||
queryFn: () => client.labrinth.projects_v3.getOrganization(projectId),
|
||||
staleTime: STALE_TIME,
|
||||
}),
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
import type { QueryClient } from '@tanstack/vue-query'
|
||||
import { useQueryClient } from '@tanstack/vue-query'
|
||||
import { getCurrentInstance } from 'vue'
|
||||
|
||||
export function useAppQueryClient(): QueryClient {
|
||||
// In components, use the standard composable
|
||||
if (getCurrentInstance()) {
|
||||
return useQueryClient()
|
||||
}
|
||||
|
||||
// In middleware/server context, use the provided instance
|
||||
const nuxtApp = useNuxtApp()
|
||||
return nuxtApp.$queryClient as QueryClient
|
||||
}
|
||||
@@ -14,6 +14,8 @@ export function createMultiFileDetectors(
|
||||
return {
|
||||
// Legacy texture pack (pre-1.6.1)
|
||||
legacyTexturePack: async (zip: JSZip): Promise<InferredVersionInfo | null> => {
|
||||
if (!rawFile.name.endsWith('.zip')) return null
|
||||
|
||||
const packTxt = zip.file('pack.txt')
|
||||
if (!packTxt) return null
|
||||
|
||||
|
||||
@@ -470,7 +470,7 @@
|
||||
<CurrencyIcon aria-hidden="true" /> {{ formatMessage(messages.revenue) }}
|
||||
</template>
|
||||
<template #analytics>
|
||||
<ChartIcon aria-hidden="true" /> {{ formatMessage(messages.analytics) }}
|
||||
<ChartIcon aria-hidden="true" /> {{ formatMessage(commonMessages.analyticsButton) }}
|
||||
</template>
|
||||
<template #moderation>
|
||||
<ScaleIcon aria-hidden="true" /> {{ formatMessage(commonMessages.moderationLabel) }}
|
||||
@@ -754,9 +754,10 @@ const route = useNativeRoute()
|
||||
const router = useNativeRouter()
|
||||
const link = config.public.siteUrl + route.path.replace(/\/+$/, '')
|
||||
|
||||
const { data: payoutBalance } = await useAsyncData('payout/balance', () =>
|
||||
useBaseFetch('payout/balance', { apiVersion: 3 }),
|
||||
)
|
||||
const { data: payoutBalance } = await useAsyncData('payout/balance', () => {
|
||||
if (!auth.value.user) return null
|
||||
return useBaseFetch('payout/balance', { apiVersion: 3 })
|
||||
})
|
||||
|
||||
const showTaxComplianceBanner = computed(() => {
|
||||
if (flags.value.testTaxForm && auth.value.user) return true
|
||||
@@ -898,10 +899,6 @@ const messages = defineMessages({
|
||||
id: 'layout.nav.revenue',
|
||||
defaultMessage: 'Revenue',
|
||||
},
|
||||
analytics: {
|
||||
id: 'layout.nav.analytics',
|
||||
defaultMessage: 'Analytics',
|
||||
},
|
||||
activeReports: {
|
||||
id: 'layout.nav.active-reports',
|
||||
defaultMessage: 'Active reports',
|
||||
@@ -989,16 +986,19 @@ const navRoutes = computed(() => [
|
||||
])
|
||||
|
||||
const userMenuOptions = computed(() => {
|
||||
const user = auth.value.user
|
||||
if (!user) return []
|
||||
|
||||
let options = [
|
||||
{
|
||||
id: 'profile',
|
||||
link: `/user/${auth.value.user.username}`,
|
||||
link: `/user/${user.username}`,
|
||||
},
|
||||
{
|
||||
id: 'plus',
|
||||
link: '/plus',
|
||||
color: 'purple',
|
||||
shown: !flags.value.hidePlusPromoInUserMenu && !isPermission(auth.value.user.badges, 1 << 0),
|
||||
shown: !flags.value.hidePlusPromoInUserMenu && !isPermission(user.badges, 1 << 0),
|
||||
},
|
||||
{
|
||||
id: 'servers',
|
||||
@@ -1051,7 +1051,7 @@ const userMenuOptions = computed(() => {
|
||||
{
|
||||
id: 'affiliate-links',
|
||||
link: '/dashboard/affiliate-links',
|
||||
shown: auth.value.user.badges & UserBadge.AFFILIATE,
|
||||
shown: user.badges & UserBadge.AFFILIATE,
|
||||
},
|
||||
{
|
||||
id: 'revenue',
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
"app-marketing.download.download-rpm": {
|
||||
"message": "تنزيل RPM"
|
||||
},
|
||||
"app-marketing.download.flathub": {
|
||||
"message": "احصل عليها من Flathub"
|
||||
},
|
||||
"app-marketing.download.linux": {
|
||||
"message": "لينكس"
|
||||
},
|
||||
@@ -38,9 +41,6 @@
|
||||
"app-marketing.download.terms": {
|
||||
"message": "خلال تنزيل Modrinth App فإنك توافق على <terms-link>الشروط</terms-link> و <privacy-link>سياسة الخصوصية</privacy-link>."
|
||||
},
|
||||
"app-marketing.download.third-party-packages": {
|
||||
"message": "حزم الطرف الثالث"
|
||||
},
|
||||
"app-marketing.download.title": {
|
||||
"message": "تنزيل Modrinth App (النسخة التجريبية)"
|
||||
},
|
||||
@@ -197,6 +197,15 @@
|
||||
"app-marketing.hero.more-download-options": {
|
||||
"message": "المزيد من خيارات التنزيل"
|
||||
},
|
||||
"app-marketing.hide-other-packages": {
|
||||
"message": "إخفاء الحزم الأخري"
|
||||
},
|
||||
"app-marketing.not-recommended": {
|
||||
"message": "لا ننصح باستخدام هؤلاء إذا لا تعلم ماذا تفعل."
|
||||
},
|
||||
"app-marketing.show-other-packages": {
|
||||
"message": "إظهار الحزم الأخري"
|
||||
},
|
||||
"auth.authorize.action.authorize": {
|
||||
"message": "سماح"
|
||||
},
|
||||
@@ -221,12 +230,6 @@
|
||||
"auth.reset-password.method-choice.description": {
|
||||
"message": "أدخل بريدك الإلكتروني في الحقل بالأسفل، وسنرسل لك رابطًا لاستعادة حسابك."
|
||||
},
|
||||
"auth.reset-password.method-choice.email-username.label": {
|
||||
"message": "البريد الإلكتروني أو اسم المستخدم"
|
||||
},
|
||||
"auth.reset-password.method-choice.email-username.placeholder": {
|
||||
"message": "البريد الإلكتروني"
|
||||
},
|
||||
"auth.reset-password.notification.email-sent.text": {
|
||||
"message": "تم إرسال بريد يحتوي على التعليمات إليك، إذا كان بريدك الإلكتروني محفوظًا مسبقًا في حسابك."
|
||||
},
|
||||
@@ -266,12 +269,6 @@
|
||||
"auth.sign-in.additional-options": {
|
||||
"message": "<forgot-password-link>هل نسيت كلمة المرور؟</forgot-password-link> • <create-account-link>إنشاء حساب</create-account-link>"
|
||||
},
|
||||
"auth.sign-in.email-username.label": {
|
||||
"message": "البريد الإلكتروني أو اسم المستخدم"
|
||||
},
|
||||
"auth.sign-in.password.label": {
|
||||
"message": "كلمة المرور"
|
||||
},
|
||||
"auth.sign-in.sign-in-with": {
|
||||
"message": "تسجيل الدخول باستخدام"
|
||||
},
|
||||
@@ -284,24 +281,12 @@
|
||||
"auth.sign-up.action.create-account": {
|
||||
"message": "إنشاء حساب"
|
||||
},
|
||||
"auth.sign-up.confirm-password.label": {
|
||||
"message": "تأكيد كلمة المرور"
|
||||
},
|
||||
"auth.sign-up.email.label": {
|
||||
"message": "البريد الإلكتروني"
|
||||
},
|
||||
"auth.sign-up.label.username": {
|
||||
"message": "اسم المستخدم"
|
||||
},
|
||||
"auth.sign-up.legal-dislaimer": {
|
||||
"message": "بإنشائك حسابًا، فإنك توافق على <terms-link>شروط مودرنث</terms-link> و<privacy-policy-link>سياسة الخصوصية</privacy-policy-link> الخاصة بها."
|
||||
},
|
||||
"auth.sign-up.notification.password-mismatch.text": {
|
||||
"message": "كلمتا المرور غير متطابقتين!"
|
||||
},
|
||||
"auth.sign-up.password.label": {
|
||||
"message": "كلمة المرور"
|
||||
},
|
||||
"auth.sign-up.sign-in-option.title": {
|
||||
"message": "هل لديك حساب بالفعل؟"
|
||||
},
|
||||
@@ -320,9 +305,6 @@
|
||||
"auth.verify-email.action.account-settings": {
|
||||
"message": "إعدادات الحساب"
|
||||
},
|
||||
"auth.verify-email.action.sign-in": {
|
||||
"message": "تسجيل الدخول"
|
||||
},
|
||||
"auth.verify-email.already-verified.description": {
|
||||
"message": "تم توثيق بريدك الإلكتروني مسبقًا!"
|
||||
},
|
||||
@@ -368,12 +350,24 @@
|
||||
"collection.button.edit-icon": {
|
||||
"message": "تعديل الأيقونة"
|
||||
},
|
||||
"collection.button.remove-icon": {
|
||||
"message": "حذف الأيقونة"
|
||||
},
|
||||
"collection.button.remove-project": {
|
||||
"message": "إزالة المشروع"
|
||||
},
|
||||
"collection.button.replace-icon": {
|
||||
"message": "تغيير الأيقونة"
|
||||
},
|
||||
"collection.button.select-icon": {
|
||||
"message": "تحديد الأيقونة"
|
||||
},
|
||||
"collection.button.unfollow-project": {
|
||||
"message": "إلغاء متابعة المشروع"
|
||||
},
|
||||
"collection.delete-modal.description": {
|
||||
"message": "هذا سوف يحذف هذه المجموعة بشكل دائم. لا يمكن التراجع في هذا التصرف."
|
||||
},
|
||||
"collection.delete-modal.title": {
|
||||
"message": "هل أنت متأكد أنك تريد حذف هذه المجموعة؟"
|
||||
},
|
||||
@@ -383,6 +377,9 @@
|
||||
"collection.description.following": {
|
||||
"message": "مجموعة تم إنشاؤها تلقائيًا تضمّ جميع المشاريع التي تتابعها."
|
||||
},
|
||||
"collection.editing": {
|
||||
"message": "تعديل المجموعة"
|
||||
},
|
||||
"collection.error.not-found": {
|
||||
"message": "لم يتم العثور على المجموعة"
|
||||
},
|
||||
@@ -392,20 +389,23 @@
|
||||
"collection.label.curated-by": {
|
||||
"message": "من إعداد"
|
||||
},
|
||||
"collection.label.no-projects": {
|
||||
"message": "لا توجد مشروعات في هذه المجموعة حتي الآن"
|
||||
},
|
||||
"collection.label.updated-at": {
|
||||
"message": "تم التحديث منذ {ago}"
|
||||
},
|
||||
"collection.return-link.dashboard-collections": {
|
||||
"message": "مجموعاتك"
|
||||
},
|
||||
"collection.return-link.user": {
|
||||
"message": "الحساب الخاص ب {user}"
|
||||
},
|
||||
"collection.title": {
|
||||
"message": "{name} - مجموعة"
|
||||
},
|
||||
"common.no": {
|
||||
"message": "لا"
|
||||
},
|
||||
"common.yes": {
|
||||
"message": "نعم"
|
||||
},
|
||||
"create.collection.cancel": {
|
||||
"message": "إلغاء"
|
||||
"create-project-version.create-modal.stage.add-files.admonition": {
|
||||
"message": "الملفات التكميلية تستخدم لدعم الموارد مثل كود المصدر، وليس للإصدارات أو الأنواع البديلة."
|
||||
},
|
||||
"create.collection.collection-info": {
|
||||
"message": "سيتم إنشاء مجموعتك الجديدة كمجموعة عامة تحتوي على {count, plural,\n one {# مشروع}\n other {# مشاريع}\n}."
|
||||
@@ -413,9 +413,6 @@
|
||||
"create.collection.create-collection": {
|
||||
"message": "إنشاء مجموعة"
|
||||
},
|
||||
"create.collection.error-title": {
|
||||
"message": "حدث خطأ"
|
||||
},
|
||||
"create.collection.name-label": {
|
||||
"message": "الاسم"
|
||||
},
|
||||
@@ -467,18 +464,57 @@
|
||||
"create.limit-alert.type-project": {
|
||||
"message": "مشروع"
|
||||
},
|
||||
"create.organization.cancel": {
|
||||
"message": "إلغاء"
|
||||
},
|
||||
"create.organization.create-organization": {
|
||||
"message": "إنشاء مؤسسة"
|
||||
},
|
||||
"create.organization.error-title": {
|
||||
"message": "حدث خطأ"
|
||||
},
|
||||
"create.organization.name-label": {
|
||||
"message": ""
|
||||
},
|
||||
"create.organization.name-placeholder": {
|
||||
"message": "أدخل اسم المنظمة..."
|
||||
},
|
||||
"create.organization.ownership-info": {
|
||||
"message": "سوف تكون مالك هذه المنظمة, لكن يمكنك بدعوة أعضاء آخرين و تحويل حالة الملكية في أي وقت."
|
||||
},
|
||||
"create.organization.summary-description": {
|
||||
"message": "جملة أو جملتان تصف مجموعتك."
|
||||
},
|
||||
"create.organization.summary-label": {
|
||||
"message": "الملخص"
|
||||
},
|
||||
"create.organization.summary-placeholder": {
|
||||
"message": "منظمة ل..."
|
||||
},
|
||||
"create.organization.title": {
|
||||
"message": "إنشاء منظمة"
|
||||
},
|
||||
"create.organization.url-label": {
|
||||
"message": "عنوان URL"
|
||||
},
|
||||
"create.project.create-project": {
|
||||
"message": "إنشاء مشروع"
|
||||
},
|
||||
"create.project.name-label": {
|
||||
"message": "الإسم"
|
||||
},
|
||||
"create.project.name-placeholder": {
|
||||
"message": "أدخل اسم المشروع..."
|
||||
},
|
||||
"create.project.summary-description": {
|
||||
"message": "جملة أو جملتان تصف مجموعتك."
|
||||
},
|
||||
"create.project.summary-label": {
|
||||
"message": "الملخص"
|
||||
},
|
||||
"create.project.summary-placeholder": {
|
||||
"message": "هذا المشروع يضيف..."
|
||||
},
|
||||
"create.project.title": {
|
||||
"message": "إنشاء مشروع"
|
||||
},
|
||||
"create.project.url-label": {
|
||||
"message": "عنوان URL"
|
||||
},
|
||||
"error.collection.404.list_item.3": {
|
||||
"message": "قد تكون هذه المجموعة قد أزالها فريق مراقبة مودرنث لانتهاك <tou-link>شروط الاستخدام</tou-link> الخاصة بنا."
|
||||
},
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"displayName": {
|
||||
"description": "Please enter the name of the language in its specific variant or regional form (e.g., English (US) for American English, not just English). If the language does not have any specific variant, simply enter the name of the language (e.g., Français, Deutsch).",
|
||||
"message": "الإنجليزية (الولايات المتحدة)"
|
||||
"message": "العربية (المملكة العربية السعودية)"
|
||||
},
|
||||
"searchTerms": {
|
||||
"description": "Please provide additional search terms associated with the language, if needed, to enhance the search functionality (e.g., American English, Deutschland). Each search term should be entered on a separate line. Translate as a hyphen (-) if no additional terms are needed.",
|
||||
"message": "الولايات المتحدة الأمريكية\nالإنجليزية الأمريكية"
|
||||
"message": "المملكة العربية السعودية \nالعربية السعودية"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
"app-marketing.download.download-rpm": {
|
||||
"message": "Stáhnout RPM"
|
||||
},
|
||||
"app-marketing.download.flathub": {
|
||||
"message": "Získat na Flathub"
|
||||
},
|
||||
"app-marketing.download.linux": {
|
||||
"message": "Linux"
|
||||
},
|
||||
@@ -38,9 +41,6 @@
|
||||
"app-marketing.download.terms": {
|
||||
"message": "Stažením aplikace Modrinth souhlasíte s našimi <terms-link>Podmínkami</terms-link> a <privacy-link>Zásadami ochrany osobních údajů</privacy-link>."
|
||||
},
|
||||
"app-marketing.download.third-party-packages": {
|
||||
"message": "Balíčky třetích stran"
|
||||
},
|
||||
"app-marketing.download.title": {
|
||||
"message": "Stáhnout Modrinth App (Beta)"
|
||||
},
|
||||
@@ -197,6 +197,15 @@
|
||||
"app-marketing.hero.more-download-options": {
|
||||
"message": "Více možností stáhnutí"
|
||||
},
|
||||
"app-marketing.hide-other-packages": {
|
||||
"message": "Skrýt ostatní balíčky"
|
||||
},
|
||||
"app-marketing.not-recommended": {
|
||||
"message": "Nedoporučujeme tyto možnosti používat, pokud přesně nevíte, co děláte."
|
||||
},
|
||||
"app-marketing.show-other-packages": {
|
||||
"message": "Zobrazit další balíčky"
|
||||
},
|
||||
"auth.authorize.action.authorize": {
|
||||
"message": "Schválit"
|
||||
},
|
||||
@@ -221,12 +230,6 @@
|
||||
"auth.reset-password.method-choice.description": {
|
||||
"message": "Zadejte svůj e-mail níže a my vám pošleme odkaz, abyste mohli obnovit heslo k svému účtu."
|
||||
},
|
||||
"auth.reset-password.method-choice.email-username.label": {
|
||||
"message": "E-mail nebo uživatelské jméno"
|
||||
},
|
||||
"auth.reset-password.method-choice.email-username.placeholder": {
|
||||
"message": "E-mail"
|
||||
},
|
||||
"auth.reset-password.notification.email-sent.text": {
|
||||
"message": "Byl vám zaslán e-mail s pokyny, pokud byl e-mail dříve uložen na váš účet."
|
||||
},
|
||||
@@ -266,12 +269,6 @@
|
||||
"auth.sign-in.additional-options": {
|
||||
"message": "<forgot-password-link>Zapomněli jste heslo?</forgot-password-link> • <create-account-link>Vytvořte si účet</create-account-link>"
|
||||
},
|
||||
"auth.sign-in.email-username.label": {
|
||||
"message": "E-mail nebo uživatelské jméno"
|
||||
},
|
||||
"auth.sign-in.password.label": {
|
||||
"message": "Heslo"
|
||||
},
|
||||
"auth.sign-in.sign-in-with": {
|
||||
"message": "Přihlášte se pomocí"
|
||||
},
|
||||
@@ -284,24 +281,12 @@
|
||||
"auth.sign-up.action.create-account": {
|
||||
"message": "Vytvořte účet"
|
||||
},
|
||||
"auth.sign-up.confirm-password.label": {
|
||||
"message": "Potvrďte heslo"
|
||||
},
|
||||
"auth.sign-up.email.label": {
|
||||
"message": "E-mail"
|
||||
},
|
||||
"auth.sign-up.label.username": {
|
||||
"message": "Uživatelské jméno"
|
||||
},
|
||||
"auth.sign-up.legal-dislaimer": {
|
||||
"message": "Vytvořením účtu souhlasíte s <terms-link>Podmínkami</terms-link> a <privacy-policy-link>Zásadami ochrany osobních údajů</privacy-policy-link> Modrinthu."
|
||||
},
|
||||
"auth.sign-up.notification.password-mismatch.text": {
|
||||
"message": "Hesla se neshodují!"
|
||||
},
|
||||
"auth.sign-up.password.label": {
|
||||
"message": "Heslo"
|
||||
},
|
||||
"auth.sign-up.sign-in-option.title": {
|
||||
"message": "Již máte účet?"
|
||||
},
|
||||
@@ -320,9 +305,6 @@
|
||||
"auth.verify-email.action.account-settings": {
|
||||
"message": "Nastavení účtu"
|
||||
},
|
||||
"auth.verify-email.action.sign-in": {
|
||||
"message": "Přihlásit se"
|
||||
},
|
||||
"auth.verify-email.already-verified.description": {
|
||||
"message": "E-mail je již ověřen!"
|
||||
},
|
||||
@@ -407,15 +389,12 @@
|
||||
"collection.label.curated-by": {
|
||||
"message": "Kurátor"
|
||||
},
|
||||
"collection.label.description": {
|
||||
"message": "Popis"
|
||||
},
|
||||
"collection.label.details": {
|
||||
"message": "Podrobnosti"
|
||||
},
|
||||
"collection.label.no-projects": {
|
||||
"message": "Zatím žádné projekty v kolekci"
|
||||
},
|
||||
"collection.label.projects-count": {
|
||||
"message": "{count, plural, =0 {Zatím žádné projektyt} one {<stat>{count}</stat> projekt} other {<stat>{count}</stat> {type}}}"
|
||||
},
|
||||
"collection.label.updated-at": {
|
||||
"message": "Aktualizováno {ago}"
|
||||
},
|
||||
@@ -428,14 +407,8 @@
|
||||
"collection.title": {
|
||||
"message": "{name} - Kolekce"
|
||||
},
|
||||
"common.no": {
|
||||
"message": "Ne"
|
||||
},
|
||||
"common.yes": {
|
||||
"message": "Ano"
|
||||
},
|
||||
"create.collection.cancel": {
|
||||
"message": "Zrušit"
|
||||
"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ů}}."
|
||||
@@ -443,9 +416,6 @@
|
||||
"create.collection.create-collection": {
|
||||
"message": "Vytvořit kolekci"
|
||||
},
|
||||
"create.collection.error-title": {
|
||||
"message": "Došlo k chybě"
|
||||
},
|
||||
"create.collection.name-label": {
|
||||
"message": "Název"
|
||||
},
|
||||
@@ -458,18 +428,27 @@
|
||||
"create.collection.summary-label": {
|
||||
"message": "Souhrn"
|
||||
},
|
||||
"create.collection.summary-placeholder": {
|
||||
"message": "Toto je sbírka..."
|
||||
},
|
||||
"create.collection.title": {
|
||||
"message": "Vytvořit kolekci"
|
||||
},
|
||||
"create.limit-alert.approaching-limit": {
|
||||
"message": "Přibližujete se {type} limitu ({current}/{max})"
|
||||
},
|
||||
"create.limit-alert.approaching-limit-description": {
|
||||
"message": "Blížíte se k limitu {type}. Pokud potřebujete více než {max} {typePlural}, kontaktujte prosím podporu."
|
||||
},
|
||||
"create.limit-alert.contact-support": {
|
||||
"message": "Kontaktujte podporu"
|
||||
},
|
||||
"create.limit-alert.limit-reached": {
|
||||
"message": "limit {type} byl dosažen"
|
||||
},
|
||||
"create.limit-alert.limit-reached-description": {
|
||||
"message": "Dosáhli jste svého limitu {type} ({max}). Pro navýšení limitu kontaktujte podporu."
|
||||
},
|
||||
"create.limit-alert.type-collection": {
|
||||
"message": "kolekce"
|
||||
},
|
||||
@@ -488,15 +467,9 @@
|
||||
"create.limit-alert.type-project": {
|
||||
"message": "projekt"
|
||||
},
|
||||
"create.organization.cancel": {
|
||||
"message": "Zrušit"
|
||||
},
|
||||
"create.organization.create-organization": {
|
||||
"message": "Vytvořit organizaci"
|
||||
},
|
||||
"create.organization.error-title": {
|
||||
"message": "Došlo k chybě"
|
||||
},
|
||||
"create.organization.name-label": {
|
||||
"message": "Název"
|
||||
},
|
||||
@@ -521,15 +494,9 @@
|
||||
"create.organization.url-label": {
|
||||
"message": "URL"
|
||||
},
|
||||
"create.project.cancel": {
|
||||
"message": "Zrušit"
|
||||
},
|
||||
"create.project.create-project": {
|
||||
"message": "Vytvořit projekt"
|
||||
},
|
||||
"create.project.error-title": {
|
||||
"message": "Došlo k chybě"
|
||||
},
|
||||
"create.project.name-label": {
|
||||
"message": "Název"
|
||||
},
|
||||
@@ -554,9 +521,6 @@
|
||||
"create.project.visibility-description": {
|
||||
"message": "Viditelnost vašeho projektu poté co bude schválena."
|
||||
},
|
||||
"create.project.visibility-label": {
|
||||
"message": "Viditelnost"
|
||||
},
|
||||
"create.project.visibility-private": {
|
||||
"message": "Soukromé"
|
||||
},
|
||||
@@ -575,6 +539,9 @@
|
||||
"dashboard.affiliate-links.header": {
|
||||
"message": "Vaše affiliate odkazy"
|
||||
},
|
||||
"dashboard.affiliate-links.revoke-confirm.body": {
|
||||
"message": "Tímto trvale zrušíte partnerský kód {id} a všechny již sdílené odkazy s tímto kódem přestanou být platné."
|
||||
},
|
||||
"dashboard.affiliate-links.revoke-confirm.button": {
|
||||
"message": "Odvolat"
|
||||
},
|
||||
@@ -590,6 +557,9 @@
|
||||
"dashboard.collections.long-title": {
|
||||
"message": "Vaše kolekce"
|
||||
},
|
||||
"dashboard.creator-tax-form-modal.confirmation.title": {
|
||||
"message": "Hotovo! 🎉"
|
||||
},
|
||||
"dashboard.creator-tax-form-modal.us-citizen.question": {
|
||||
"message": "Jste občan USA?"
|
||||
},
|
||||
@@ -599,6 +569,12 @@
|
||||
"dashboard.creator-withdraw-modal.method-selection.country-placeholder": {
|
||||
"message": "Zvolte vaši zemi"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.method-selection.country-search-placeholder": {
|
||||
"message": "Vyhladaj štát..."
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.method-selection.region": {
|
||||
"message": "Región"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.muralpay-details.account-owner": {
|
||||
"message": "Majitel účtu"
|
||||
},
|
||||
@@ -608,6 +584,12 @@
|
||||
"dashboard.creator-withdraw-modal.muralpay-details.document-number-passport": {
|
||||
"message": "Číslo vašeho pasu"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.muralpay-details.document-number-ruc-placeholder": {
|
||||
"message": "Zadejte číslo RUC"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.muralpay-details.document-number-tax-id-placeholder": {
|
||||
"message": "Zadejte DIČ"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.paypal-details.account": {
|
||||
"message": "Účet"
|
||||
},
|
||||
@@ -620,15 +602,6 @@
|
||||
"dashboard.creator-withdraw-modal.paypal-details.paypal-account": {
|
||||
"message": "PayPal účet"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.paypal-details.save-button": {
|
||||
"message": "Uložit"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.paypal-details.saved-button": {
|
||||
"message": "Uloženo"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.stage.tremendous-details": {
|
||||
"message": "Podrobnosti"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.tremendous-details.reward": {
|
||||
"message": "Odměna"
|
||||
},
|
||||
@@ -638,9 +611,21 @@
|
||||
"dashboard.creator-withdraw-modal.tremendous-details.unverified-email-header": {
|
||||
"message": "Neověřený email"
|
||||
},
|
||||
"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.revenue.available-now": {
|
||||
"message": "K dispozici nyní"
|
||||
},
|
||||
"dashboard.revenue.estimated-with-date": {
|
||||
"message": "Odhadováno {date}"
|
||||
},
|
||||
"dashboard.revenue.stats.transactions": {
|
||||
"message": "Transakce"
|
||||
},
|
||||
"dashboard.revenue.transactions.btn.download-csv": {
|
||||
"message": "Stáhnout jako CSV"
|
||||
},
|
||||
"dashboard.withdraw.completion.account": {
|
||||
"message": "Účet"
|
||||
},
|
||||
@@ -740,12 +725,6 @@
|
||||
"frog.altText": {
|
||||
"message": "Fotorealistické vyobrazení žabího labyrintu"
|
||||
},
|
||||
"frog.froggedPeople": {
|
||||
"message": "{count, plural, one {{count} další člověk byl také ožaben!} few {{count} další lidi byli také ožabeni!} other {{count} dalších lidí bylo také ožabeno!}}"
|
||||
},
|
||||
"frog.sinceOpened": {
|
||||
"message": "Tato stránka byla otevřena {ago}"
|
||||
},
|
||||
"frog.title": {
|
||||
"message": "Žába"
|
||||
},
|
||||
@@ -770,15 +749,6 @@
|
||||
"landing.notifications.heading": {
|
||||
"message": "Oznámení"
|
||||
},
|
||||
"landing.search.label": {
|
||||
"message": "Hledat"
|
||||
},
|
||||
"landing.search.placeholder": {
|
||||
"message": "Hledat..."
|
||||
},
|
||||
"landing.search.sort-by.label": {
|
||||
"message": "Seřadit podle"
|
||||
},
|
||||
"landing.section.for-players.label": {
|
||||
"message": "Pro hráče"
|
||||
},
|
||||
@@ -923,9 +893,6 @@
|
||||
"layout.meta.og-description": {
|
||||
"message": "Objevte a publikujte obsah Minecraftu!"
|
||||
},
|
||||
"layout.nav.analytics": {
|
||||
"message": "Analytika"
|
||||
},
|
||||
"layout.nav.get-modrinth-app": {
|
||||
"message": "Stáhnout Modrinth aplikaci"
|
||||
},
|
||||
@@ -953,9 +920,6 @@
|
||||
"layout.nav.search": {
|
||||
"message": "Hledat"
|
||||
},
|
||||
"moderation.filter.by": {
|
||||
"message": "Filtrovat"
|
||||
},
|
||||
"moderation.moderate": {
|
||||
"message": "Moderace"
|
||||
},
|
||||
@@ -968,12 +932,6 @@
|
||||
"moderation.page.technicalReview": {
|
||||
"message": "Technické hodnocení"
|
||||
},
|
||||
"moderation.search.placeholder": {
|
||||
"message": "Hledat..."
|
||||
},
|
||||
"moderation.sort.by": {
|
||||
"message": "Řadit podle"
|
||||
},
|
||||
"muralpay.country.at": {
|
||||
"message": "Rakousko"
|
||||
},
|
||||
@@ -1052,9 +1010,6 @@
|
||||
"profile.label.badges": {
|
||||
"message": "Odznaky"
|
||||
},
|
||||
"profile.label.details": {
|
||||
"message": "Detaily"
|
||||
},
|
||||
"profile.label.no-collections": {
|
||||
"message": "Tento uživatel nemá žádné kolekce!"
|
||||
},
|
||||
@@ -1073,9 +1028,6 @@
|
||||
"profile.label.saving": {
|
||||
"message": "Ukládání..."
|
||||
},
|
||||
"profile.label.yes": {
|
||||
"message": "Ano"
|
||||
},
|
||||
"profile.meta.description": {
|
||||
"message": "Stáhněte si projekty od {username} na Modrinthu"
|
||||
},
|
||||
@@ -1088,15 +1040,6 @@
|
||||
"profile.user-id": {
|
||||
"message": "ID uživatele: {id}"
|
||||
},
|
||||
"project-member-header.accept": {
|
||||
"message": "Přijato"
|
||||
},
|
||||
"project-member-header.decline": {
|
||||
"message": "Zamítnout"
|
||||
},
|
||||
"project-member-header.error": {
|
||||
"message": "Chyba"
|
||||
},
|
||||
"project-member-header.error-decline": {
|
||||
"message": "Nepodařilo se zamítnout pozvánku do týmu"
|
||||
},
|
||||
@@ -1109,9 +1052,6 @@
|
||||
"project-member-header.invitation-title": {
|
||||
"message": "Pozvánka připojit se k projektu"
|
||||
},
|
||||
"project-member-header.success": {
|
||||
"message": "Úspěch"
|
||||
},
|
||||
"project-member-header.success-decline": {
|
||||
"message": "Odmítli jste pozvánku do týmu"
|
||||
},
|
||||
@@ -1423,8 +1363,5 @@
|
||||
},
|
||||
"settings.profile.profile-picture.title": {
|
||||
"message": "Profilový obrázek"
|
||||
},
|
||||
"settings.profile.username.title": {
|
||||
"message": "Uživatelské jméno"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
"app-marketing.download.download-rpm": {
|
||||
"message": "Download RPM'en"
|
||||
},
|
||||
"app-marketing.download.flathub": {
|
||||
"message": "Få det på Flathub"
|
||||
},
|
||||
"app-marketing.download.linux": {
|
||||
"message": "Linux"
|
||||
},
|
||||
@@ -38,9 +41,6 @@
|
||||
"app-marketing.download.terms": {
|
||||
"message": "Ved at download Modrinth du acceptere vores <terms-link>servicevilkår</terms-link> og <privacy-link>privatlivspolitik</privacy-link>."
|
||||
},
|
||||
"app-marketing.download.third-party-packages": {
|
||||
"message": "Tredjepartspakker"
|
||||
},
|
||||
"app-marketing.download.title": {
|
||||
"message": "Download Modrinth (Beta)"
|
||||
},
|
||||
@@ -191,6 +191,21 @@
|
||||
"app-marketing.hero.download-modrinth-app-for-os": {
|
||||
"message": "Hent Modrinth Appen til {os}"
|
||||
},
|
||||
"app-marketing.hero.minecraft-screenshot-alt": {
|
||||
"message": "Skærmbilleder af Cobblemon instance'ens primære menu skærm."
|
||||
},
|
||||
"app-marketing.hero.more-download-options": {
|
||||
"message": "Flere Download Muligheder"
|
||||
},
|
||||
"app-marketing.hide-other-packages": {
|
||||
"message": "Gem andre pakker"
|
||||
},
|
||||
"app-marketing.not-recommended": {
|
||||
"message": "Vi opfordre ikke du bruger disse medmindre du ved hvad du gør."
|
||||
},
|
||||
"app-marketing.show-other-packages": {
|
||||
"message": "Vis andre pakker"
|
||||
},
|
||||
"auth.authorize.action.authorize": {
|
||||
"message": "Godkend"
|
||||
},
|
||||
@@ -215,12 +230,6 @@
|
||||
"auth.reset-password.method-choice.description": {
|
||||
"message": "Indtast din e-mail nedenfor, så sender vi et gendannelseslink, så du kan gendanne din konto."
|
||||
},
|
||||
"auth.reset-password.method-choice.email-username.label": {
|
||||
"message": "E-mail eller brugernavn"
|
||||
},
|
||||
"auth.reset-password.method-choice.email-username.placeholder": {
|
||||
"message": "E-mail"
|
||||
},
|
||||
"auth.reset-password.notification.email-sent.text": {
|
||||
"message": "En e-mail med instruktioner er blevet sendt til dig, hvis e-mailen tidligere er blevet gemt på din konto."
|
||||
},
|
||||
@@ -260,12 +269,6 @@
|
||||
"auth.sign-in.additional-options": {
|
||||
"message": "<forgot-password-link>Glemt adgangskode?</forgot-password-link> • <create-account-link>Opret en konto</create-account-link>"
|
||||
},
|
||||
"auth.sign-in.email-username.label": {
|
||||
"message": "E-mail eller brugernavn"
|
||||
},
|
||||
"auth.sign-in.password.label": {
|
||||
"message": "Adgangskode"
|
||||
},
|
||||
"auth.sign-in.sign-in-with": {
|
||||
"message": "Log ind med"
|
||||
},
|
||||
@@ -278,36 +281,228 @@
|
||||
"auth.sign-up.action.create-account": {
|
||||
"message": "Opret konto"
|
||||
},
|
||||
"auth.sign-up.confirm-password.label": {
|
||||
"message": "Bekræft adgangskoden"
|
||||
"auth.sign-up.legal-dislaimer": {
|
||||
"message": "Ved at oprette en konto, accepterer du Modrinth's <terms-link>Vilkår</terms-link> og <privacy-policy-link>Privatlivspolitik</privacy-policy-link>."
|
||||
},
|
||||
"auth.sign-up.email.label": {
|
||||
"message": "E-mail"
|
||||
"auth.sign-up.notification.password-mismatch.text": {
|
||||
"message": "Adgangskoderne er ikke ens!"
|
||||
},
|
||||
"auth.sign-up.label.username": {
|
||||
"message": "Brugernavn"
|
||||
"auth.sign-up.sign-in-option.title": {
|
||||
"message": "Har du allerede en konto?"
|
||||
},
|
||||
"auth.sign-up.subscribe.label": {
|
||||
"message": "Abonner på opdateringer om Modrinth"
|
||||
},
|
||||
"auth.sign-up.title": {
|
||||
"message": "Tilmeld"
|
||||
},
|
||||
"auth.sign-up.title.create-account": {
|
||||
"message": "Eller opret en konto selv"
|
||||
},
|
||||
"auth.sign-up.title.sign-up-with": {
|
||||
"message": "Tilmeld dig med"
|
||||
},
|
||||
"auth.verify-email.action.account-settings": {
|
||||
"message": "Kontoindstillinger"
|
||||
},
|
||||
"auth.verify-email.already-verified.description": {
|
||||
"message": "Din e-mail er allerede bekræftet!"
|
||||
},
|
||||
"auth.verify-email.already-verified.title": {
|
||||
"message": "E-mail allerede bekræftet"
|
||||
},
|
||||
"auth.verify-email.failed-verification.action": {
|
||||
"message": "Send bekræftelsesmail igen"
|
||||
},
|
||||
"auth.verify-email.failed-verification.description": {
|
||||
"message": "Vi kunne ikke bekræfte din e-mail. Prøv at sende bekræftelsesmailen igen via dit dashboard ved at logge ind."
|
||||
},
|
||||
"auth.verify-email.failed-verification.description.logged-in": {
|
||||
"message": "Vi kunne ikke bekræfte din e-mail. Prøv at sende bekræftelsesmailen igen via knappen nedenfor."
|
||||
},
|
||||
"auth.verify-email.failed-verification.title": {
|
||||
"message": "E-mailbekræftelse mislykkedes"
|
||||
},
|
||||
"auth.verify-email.post-verification.description": {
|
||||
"message": "Din e-mailadresse er blevet bekræftet!"
|
||||
},
|
||||
"auth.verify-email.post-verification.title": {
|
||||
"message": "E-mailbekræftelse"
|
||||
},
|
||||
"auth.verify-email.title": {
|
||||
"message": "Bekræft E-mail"
|
||||
},
|
||||
"auth.welcome.checkbox.subscribe": {
|
||||
"message": "Abonner på opdateringer om Modrinth"
|
||||
},
|
||||
"auth.welcome.description": {
|
||||
"message": "Du er nu en del af det awesome fællesskab og skabere og udforskere der allerede bygger, downloader, og forbliver opdateret med fantastiske mods."
|
||||
},
|
||||
"auth.welcome.label.tos": {
|
||||
"message": "Ved at oprette en konto, accepterer du Modrinth's <terms-link>Vilkår</terms-link> og <privacy-policy-link>Privatlivspolitik</privacy-policy-link>."
|
||||
},
|
||||
"auth.welcome.long-title": {
|
||||
"message": "Velkommen til Modrinth!"
|
||||
},
|
||||
"auth.welcome.title": {
|
||||
"message": "Velkommen"
|
||||
},
|
||||
"collection.button.edit-icon": {
|
||||
"message": "Rediger ikon"
|
||||
},
|
||||
"collection.button.remove-icon": {
|
||||
"message": "Fjern ikon"
|
||||
},
|
||||
"collection.button.remove-project": {
|
||||
"message": "Slet projekt"
|
||||
},
|
||||
"create.collection.cancel": {
|
||||
"message": "Annuller"
|
||||
"collection.button.replace-icon": {
|
||||
"message": "Udskift ikon"
|
||||
},
|
||||
"collection.button.select-icon": {
|
||||
"message": "Vælg ikon"
|
||||
},
|
||||
"collection.button.unfollow-project": {
|
||||
"message": "Stop med at følge projekt"
|
||||
},
|
||||
"collection.delete-modal.description": {
|
||||
"message": "Dette vil permanent slette denne samlig. Dette vil ikke kunne blive fortydes."
|
||||
},
|
||||
"collection.delete-modal.title": {
|
||||
"message": "Er du sikker på, at du vil slette denne samling?"
|
||||
},
|
||||
"collection.description": {
|
||||
"message": "{description} - Se samlingen {name} af {username} på Modrinth"
|
||||
},
|
||||
"collection.description.following": {
|
||||
"message": "Auto-genererede samling af alle de projekter, du følger."
|
||||
},
|
||||
"collection.editing": {
|
||||
"message": "Redigere samling"
|
||||
},
|
||||
"collection.error.not-found": {
|
||||
"message": "Samling ikke fundet"
|
||||
},
|
||||
"collection.label.created-at": {
|
||||
"message": "Oprettet {ago}"
|
||||
},
|
||||
"collection.label.curated-by": {
|
||||
"message": "Kurateret af"
|
||||
},
|
||||
"collection.label.no-projects": {
|
||||
"message": "Ingen projekter i samlingen endnu"
|
||||
},
|
||||
"collection.label.updated-at": {
|
||||
"message": "Opdateret {ago}"
|
||||
},
|
||||
"collection.return-link.dashboard-collections": {
|
||||
"message": "Dine samlinger"
|
||||
},
|
||||
"collection.return-link.user": {
|
||||
"message": "{user}'s profil"
|
||||
},
|
||||
"collection.title": {
|
||||
"message": "{name} - samling"
|
||||
},
|
||||
"create.collection.collection-info": {
|
||||
"message": "Din nye samling vil blive skabt som en offentlig samling med {count, plural, =0 {ingen projekter} one {# projekt} other {# projekter}}."
|
||||
},
|
||||
"create.collection.create-collection": {
|
||||
"message": "Opret samling"
|
||||
},
|
||||
"create.collection.error-title": {
|
||||
"message": "Der opstod en fejl"
|
||||
},
|
||||
"create.collection.name-label": {
|
||||
"message": "Navn"
|
||||
},
|
||||
"create.collection.name-placeholder": {
|
||||
"message": "Indtast samling navn..."
|
||||
},
|
||||
"create.collection.summary-description": {
|
||||
"message": "En sætning eller to som beskriver din samling."
|
||||
},
|
||||
"create.collection.summary-label": {
|
||||
"message": "Resumé"
|
||||
},
|
||||
"create.collection.summary-placeholder": {
|
||||
"message": "Dette er en samling af..."
|
||||
},
|
||||
"create.collection.title": {
|
||||
"message": "Opretter en samling"
|
||||
},
|
||||
"create.limit-alert.contact-support": {
|
||||
"message": "Kontakt support"
|
||||
},
|
||||
"create.limit-alert.type-collection": {
|
||||
"message": "samling"
|
||||
},
|
||||
"create.limit-alert.type-organization": {
|
||||
"message": "organisation"
|
||||
},
|
||||
"create.limit-alert.type-plural-collection": {
|
||||
"message": "samlinger"
|
||||
},
|
||||
"create.limit-alert.type-plural-organization": {
|
||||
"message": "organisationer"
|
||||
},
|
||||
"create.limit-alert.type-plural-project": {
|
||||
"message": "projekter"
|
||||
},
|
||||
"create.limit-alert.type-project": {
|
||||
"message": "projekt"
|
||||
},
|
||||
"create.organization.create-organization": {
|
||||
"message": "Opret organisation"
|
||||
},
|
||||
"create.organization.name-label": {
|
||||
"message": "Navn"
|
||||
},
|
||||
"create.organization.name-placeholder": {
|
||||
"message": "Indtast organisation navn..."
|
||||
},
|
||||
"create.organization.ownership-info": {
|
||||
"message": "Du vil blive ejeren af denne organisation, men du kan invitere andre medlemmer og overføre ejerskabet på et hvert tidspunkt."
|
||||
},
|
||||
"create.organization.summary-description": {
|
||||
"message": "En sætning eller to som beskriver din organisation."
|
||||
},
|
||||
"create.organization.summary-label": {
|
||||
"message": "Resumé"
|
||||
},
|
||||
"create.organization.summary-placeholder": {
|
||||
"message": "En organisation til..."
|
||||
},
|
||||
"create.organization.title": {
|
||||
"message": "Opretter en organisation"
|
||||
},
|
||||
"create.organization.url-label": {
|
||||
"message": "URL"
|
||||
},
|
||||
"create.project.create-project": {
|
||||
"message": "Opret projekt"
|
||||
},
|
||||
"create.project.name-label": {
|
||||
"message": "Navn"
|
||||
},
|
||||
"create.project.name-placeholder": {
|
||||
"message": "Indtast projekt navn..."
|
||||
},
|
||||
"create.project.summary-description": {
|
||||
"message": "En sætning eller to som beskriver dit projekt."
|
||||
},
|
||||
"create.project.summary-label": {
|
||||
"message": "Resumé"
|
||||
},
|
||||
"create.project.summary-placeholder": {
|
||||
"message": "Dette projekt tilføjer..."
|
||||
},
|
||||
"create.project.title": {
|
||||
"message": "Opretter et projekt"
|
||||
},
|
||||
"create.project.url-label": {
|
||||
"message": "URL"
|
||||
},
|
||||
"create.project.visibility-description": {
|
||||
"message": "Dit projekts synlighed efter det er blevet godkendt."
|
||||
},
|
||||
"create.project.visibility-label": {
|
||||
"message": "Synlighed"
|
||||
},
|
||||
"create.project.visibility-private": {
|
||||
"message": "Privat"
|
||||
},
|
||||
@@ -326,6 +521,39 @@
|
||||
"dashboard.affiliate-links.header": {
|
||||
"message": "Dine affiliate links"
|
||||
},
|
||||
"dashboard.affiliate-links.revoke-confirm.body": {
|
||||
"message": "Dette vil permanent fjerne partnerskabs-koden `{id}` og alle eksisterende links med denne kode some er blevet delt vil ikke længere være gyldig."
|
||||
},
|
||||
"dashboard.affiliate-links.revoke-confirm.button": {
|
||||
"message": "Fjern"
|
||||
},
|
||||
"dashboard.affiliate-links.revoke-confirm.title": {
|
||||
"message": "Er du sikker på du vil fjerne din \"{title}\" partnerskabs-link?"
|
||||
},
|
||||
"dashboard.affiliate-links.search": {
|
||||
"message": "Søg partnerskabs-links..."
|
||||
},
|
||||
"dashboard.collections.button.create-new": {
|
||||
"message": "Opret ny"
|
||||
},
|
||||
"dashboard.collections.label.projects-count": {
|
||||
"message": "{count, plural, one {{count} projekt} other {{count} projekter}}"
|
||||
},
|
||||
"dashboard.collections.label.search-input": {
|
||||
"message": "Søg dine samlinger"
|
||||
},
|
||||
"dashboard.collections.long-title": {
|
||||
"message": "Dine samlinger"
|
||||
},
|
||||
"dashboard.creator-tax-form-modal.confirmation.download-button": {
|
||||
"message": "Download {formType}"
|
||||
},
|
||||
"dashboard.creator-tax-form-modal.confirmation.success": {
|
||||
"message": "Din {formType} skatte form er blevet indsendt!"
|
||||
},
|
||||
"dashboard.creator-tax-form-modal.entity.private-individual": {
|
||||
"message": "Privat individ"
|
||||
},
|
||||
"dashboard.creator-tax-form-modal.security.description": {
|
||||
"message": "Modrinth bruger tredjepartsudbyder Track1099 til sikkert at indsamle og opbevare dine skatteformularer. <security-link>Læs mere her.</security-link>"
|
||||
},
|
||||
@@ -335,6 +563,63 @@
|
||||
"dashboard.creator-tax-form-modal.us-citizen.question": {
|
||||
"message": "Er du amerikansk statsborger?"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.details-label": {
|
||||
"message": "Detaljer"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.fee-breakdown-amount": {
|
||||
"message": "Antal"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.fee-breakdown-fee": {
|
||||
"message": "Gebyr"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.fee-breakdown-gift-card-value": {
|
||||
"message": "Gavekort værdi"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.fee-breakdown-usd-equivalent": {
|
||||
"message": "Tilsvarende i USD"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.kyc.private-individual": {
|
||||
"message": "Privat individ"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.method-selection.country-placeholder": {
|
||||
"message": "Vælg dit land"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.method-selection.country-search-placeholder": {
|
||||
"message": "Søg lande..."
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.method-selection.error-text": {
|
||||
"message": "Kunne ikke hente gyldige betalingsmetoder. Venligst prøv igen senere."
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.method-selection.error-title": {
|
||||
"message": "Indlæsning af betalingsmetoder fejlede"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.method-selection.select-method": {
|
||||
"message": "Vælg udbetalingsmetode"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.muralpay-details.account-owner": {
|
||||
"message": "Konto ejer"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.muralpay-details.bank-account-owner": {
|
||||
"message": "Bank konto ejer"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.muralpay-details.bank-account-owner-description": {
|
||||
"message": "Indtast navnet af personen der er bemyndiget at bruge denne bank konto på firmaets vegne."
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.muralpay-details.document-number-passport": {
|
||||
"message": "Pas nummer"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.muralpay-details.document-number-passport-placeholder": {
|
||||
"message": "Indtast pas nummer"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.paypal-details.account": {
|
||||
"message": "Konto"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.paypal-details.disconnect-account": {
|
||||
"message": "Fjern konto"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.paypal-details.payment-method": {
|
||||
"message": "Betalingsmetode"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.paypal-details.paypal-account": {
|
||||
"message": "PayPal konto"
|
||||
},
|
||||
@@ -353,14 +638,11 @@
|
||||
"dashboard.creator-withdraw-modal.stage.method-selection": {
|
||||
"message": "Metode"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.stage.muralpay-details": {
|
||||
"message": "Kontooplysninger"
|
||||
"dashboard.creator-withdraw-modal.tremendous-details.enter-amount-hint": {
|
||||
"message": "Find gavekort omkring denne værdi."
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.stage.muralpay-kyc": {
|
||||
"message": "Verifikation"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.stage.tremendous-details": {
|
||||
"message": "Detaljer"
|
||||
"dashboard.creator-withdraw-modal.tremendous-details.enter-denomination-placeholder": {
|
||||
"message": "Indtast antal"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.tremendous-details.payment-method": {
|
||||
"message": "Betalingsmetode"
|
||||
@@ -377,6 +659,12 @@
|
||||
"dashboard.creator-withdraw-modal.tremendous-details.search-amount-label": {
|
||||
"message": "Antal søgte"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.tremendous-details.unverified-email-header": {
|
||||
"message": "Ubekræftet email"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.tremendous-details.usd-paypal-warning-header": {
|
||||
"message": "Lavere gebyr muligt"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.withdraw-button": {
|
||||
"message": "Hæv"
|
||||
},
|
||||
@@ -389,6 +677,9 @@
|
||||
"dashboard.revenue.balance": {
|
||||
"message": "Saldo"
|
||||
},
|
||||
"dashboard.revenue.estimated-with-date": {
|
||||
"message": "Anslået {date}"
|
||||
},
|
||||
"dashboard.revenue.processing": {
|
||||
"message": "Behandler"
|
||||
},
|
||||
@@ -401,6 +692,9 @@
|
||||
"dashboard.revenue.stats.withdrawn": {
|
||||
"message": "Hævet"
|
||||
},
|
||||
"dashboard.revenue.transactions.btn.download-csv": {
|
||||
"message": "Download som CSV"
|
||||
},
|
||||
"dashboard.revenue.transactions.header": {
|
||||
"message": "Transaktioner"
|
||||
},
|
||||
@@ -413,24 +707,126 @@
|
||||
"dashboard.revenue.withdraw.card.title": {
|
||||
"message": "Hæv"
|
||||
},
|
||||
"dashboard.revenue.withdraw.header": {
|
||||
"message": "Hæv"
|
||||
},
|
||||
"dashboard.withdraw.completion.account": {
|
||||
"message": "Konto"
|
||||
},
|
||||
"dashboard.withdraw.completion.amount": {
|
||||
"message": "Antal"
|
||||
},
|
||||
"dashboard.withdraw.completion.date": {
|
||||
"message": "Dato"
|
||||
},
|
||||
"dashboard.withdraw.completion.fee": {
|
||||
"message": "Gebyr"
|
||||
},
|
||||
"dashboard.withdraw.completion.method": {
|
||||
"message": "Metode"
|
||||
},
|
||||
"dashboard.withdraw.completion.recipient": {
|
||||
"message": "Modtager"
|
||||
},
|
||||
"dashboard.withdraw.completion.transactions-button": {
|
||||
"message": "Transaktioner"
|
||||
},
|
||||
"dashboard.withdraw.completion.wallet": {
|
||||
"message": "Pung"
|
||||
},
|
||||
"dashboard.withdraw.error.account-not-linked.title": {
|
||||
"message": "Konto ikke tilknyttet"
|
||||
},
|
||||
"dashboard.withdraw.error.invalid-address.text": {
|
||||
"message": "Adressen du angav kunne ikke blive bekræftet. Venligst tjek din adresse."
|
||||
},
|
||||
"dashboard.withdraw.error.invalid-address.title": {
|
||||
"message": "Adresse bekræftigelse fejlede"
|
||||
},
|
||||
"dashboard.withdraw.error.minimum-not-met.title": {
|
||||
"message": "Antal er for lavt"
|
||||
},
|
||||
"error.collection.404.list_item.1": {
|
||||
"message": "Du har måske tastefejl i samlingen's URL."
|
||||
},
|
||||
"error.collection.404.list_item.2": {
|
||||
"message": "Samlingen er måske privat."
|
||||
},
|
||||
"error.collection.404.list_item.3": {
|
||||
"message": "Samlingen er måske blevet taget ned af Modrinth's moderatorteam for at være i strid imod vores <tou-link>Vilkår for brug</tou-link>."
|
||||
},
|
||||
"error.collection.404.list_title": {
|
||||
"message": "Hvorfor?"
|
||||
},
|
||||
"error.collection.404.title": {
|
||||
"message": "Samling ikke fundet"
|
||||
},
|
||||
"error.generic.404.subtitle": {
|
||||
"message": "Siden du kigger efter ser ikke ud til at eksistere."
|
||||
},
|
||||
"error.generic.404.title": {
|
||||
"message": "Side ikke fundet"
|
||||
},
|
||||
"error.generic.451.subtitle": {
|
||||
"message": "Denne side er blevet blokeret af lovmæssige årsager, så som statscensur eller igangværende retssager."
|
||||
},
|
||||
"error.generic.451.title": {
|
||||
"message": "Indholdet er ikke tilgængeligt af lovmæssige årsager"
|
||||
},
|
||||
"error.generic.default.list_item.1": {
|
||||
"message": "Tjek om Modrinth er nede på vores <status-link>Status side</status-link>."
|
||||
},
|
||||
"error.generic.default.list_item.2": {
|
||||
"message": "Hvis der bliver ved med at ske, kan du dele det Modrinth Team ved at join vores <discord-link>Discord server</discord-link>."
|
||||
},
|
||||
"error.generic.default.list_title": {
|
||||
"message": "Venligst prøv igen om nogle minutter."
|
||||
},
|
||||
"error.generic.default.subtitle": {
|
||||
"message": "Noget gik galt."
|
||||
},
|
||||
"error.generic.default.title": {
|
||||
"message": "Åh nej!"
|
||||
},
|
||||
"error.organization.404.list_item.1": {
|
||||
"message": "Du har måske tastefejl i organisationen's URL."
|
||||
},
|
||||
"error.organization.404.list_item.2": {
|
||||
"message": "Organisationens ejer har måske ændret URL'en eller slettet den."
|
||||
},
|
||||
"error.organization.404.list_item.3": {
|
||||
"message": "Organisationen er måske blevet taget ned af Modrinth's moderatorteam for at være i strid imod vores <tou-link>Vilkår for brug</tou-link>."
|
||||
},
|
||||
"error.organization.404.list_title": {
|
||||
"message": "Hvorfor?"
|
||||
},
|
||||
"error.organization.404.title": {
|
||||
"message": "Organisation ikke fundet"
|
||||
},
|
||||
"error.project.404.list_item.1": {
|
||||
"message": "Du har måske tastefejl i projektet's URL."
|
||||
},
|
||||
"error.project.404.list_item.2": {
|
||||
"message": "Projektets ejer har måske ændret URL'en, lavet projektet privat, eller slettet den."
|
||||
},
|
||||
"error.project.404.list_item.3": {
|
||||
"message": "Projektet er måske blevet taget ned af Modrinth's moderatorteam for at være i strid imod vores <tou-link>Vilkår for brug</tou-link>."
|
||||
},
|
||||
"error.project.404.list_title": {
|
||||
"message": "Hvorfor?"
|
||||
},
|
||||
"error.project.404.title": {
|
||||
"message": "Projekt ikke fundet"
|
||||
},
|
||||
"error.user.404.list_item.1": {
|
||||
"message": "Du har måske tastefejl i brugeren's brugernavn."
|
||||
},
|
||||
"error.user.404.list_item.2": {
|
||||
"message": "Brugeren har måske ændret deres brugernavn eller slettet deres konto."
|
||||
},
|
||||
"error.user.404.list_item.3": {
|
||||
"message": "Brugeren's konto er måske blevet slettet for at gå i strid imod Modrinth's <tou-link>Vilkår for brug</tou-link>."
|
||||
},
|
||||
"error.user.404.list_title": {
|
||||
"message": "Hvorfor?"
|
||||
},
|
||||
@@ -440,9 +836,36 @@
|
||||
"frog": {
|
||||
"message": "Du er blevet frøleret! 🐸"
|
||||
},
|
||||
"frog.altText": {
|
||||
"message": "Et fotorealistisk maleri af en frø-labyrint"
|
||||
},
|
||||
"frog.title": {
|
||||
"message": "Frø"
|
||||
},
|
||||
"hosting-marketing.available-locations": {
|
||||
"message": "Tilgængelig i Nord Amerika, Europa, og Sydøst Asien for bred dækning."
|
||||
},
|
||||
"hosting-marketing.billing.monthly": {
|
||||
"message": "Betal hvert måned"
|
||||
},
|
||||
"hosting-marketing.billing.quarterly": {
|
||||
"message": "Betal hvert kvartal"
|
||||
},
|
||||
"hosting-marketing.billing.save-with-quarterly": {
|
||||
"message": "Spar 16% med betaling hvert kvartal!"
|
||||
},
|
||||
"hosting-marketing.billing.starting-at": {
|
||||
"message": "Start ved {price} / måned"
|
||||
},
|
||||
"hosting-marketing.billing.yearly": {
|
||||
"message": "Betal hvert år"
|
||||
},
|
||||
"hosting-marketing.faq.cpu-kind": {
|
||||
"message": "Hvilken form for CPU'er køre Modrinth Hosting servere på?"
|
||||
},
|
||||
"hosting-marketing.faq.cpu-kind.answer": {
|
||||
"message": "Modrinth Hosting servere er drevet af AMD Ryzen 7900 og 7950X3D lignende CPU'er på 5+ GHz, parret med DDR5 hukommelse."
|
||||
},
|
||||
"landing.creator.feature.discovery.title": {
|
||||
"message": "Udforsk"
|
||||
},
|
||||
@@ -467,15 +890,6 @@
|
||||
"landing.notifications.received-time": {
|
||||
"message": "Modtaget {time}"
|
||||
},
|
||||
"landing.search.label": {
|
||||
"message": "Søg"
|
||||
},
|
||||
"landing.search.placeholder": {
|
||||
"message": "Søg..."
|
||||
},
|
||||
"landing.search.sort-by.label": {
|
||||
"message": "Sorter efter"
|
||||
},
|
||||
"settings.pats.modal.create.name.label": {
|
||||
"message": "Navn"
|
||||
}
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
"app-marketing.download.download-rpm": {
|
||||
"message": "Lade das RPM herunter"
|
||||
},
|
||||
"app-marketing.download.flathub": {
|
||||
"message": "Auf Flathub herunterladen"
|
||||
},
|
||||
"app-marketing.download.linux": {
|
||||
"message": "Linux"
|
||||
},
|
||||
@@ -38,9 +41,6 @@
|
||||
"app-marketing.download.terms": {
|
||||
"message": "Durch das herunterladen der Modrinth App stimmst du unseren <terms-link>Nutzungsbedingungen</terms-link> und <privacy-link>Datenschutzrichtlinien</privacy-link> zu."
|
||||
},
|
||||
"app-marketing.download.third-party-packages": {
|
||||
"message": "Drittanbieter Pakete"
|
||||
},
|
||||
"app-marketing.download.title": {
|
||||
"message": "Modrinth App (Beta) herunterladen"
|
||||
},
|
||||
@@ -197,6 +197,15 @@
|
||||
"app-marketing.hero.more-download-options": {
|
||||
"message": "Weitere Downloadoptionen"
|
||||
},
|
||||
"app-marketing.hide-other-packages": {
|
||||
"message": "Andere Pakete verstecken"
|
||||
},
|
||||
"app-marketing.not-recommended": {
|
||||
"message": "Wir empfehlen, diese nicht zu verwenden, ausser du weisst was du tust."
|
||||
},
|
||||
"app-marketing.show-other-packages": {
|
||||
"message": "Andere Pakete anzeigen"
|
||||
},
|
||||
"auth.authorize.action.authorize": {
|
||||
"message": "Autorisieren"
|
||||
},
|
||||
@@ -221,12 +230,6 @@
|
||||
"auth.reset-password.method-choice.description": {
|
||||
"message": "Gib eine E-Mail unten ein und wir werden dir einen Wiederherstellungslink zum wiederherstellen deines Kontos senden."
|
||||
},
|
||||
"auth.reset-password.method-choice.email-username.label": {
|
||||
"message": "E-Mail oder Nutzername"
|
||||
},
|
||||
"auth.reset-password.method-choice.email-username.placeholder": {
|
||||
"message": "E-Mail"
|
||||
},
|
||||
"auth.reset-password.notification.email-sent.text": {
|
||||
"message": "Eine E-Mail mit Anweisungen wurde gesendet, falls diese E-Mail zuvor in deinem Konto gespeicher wurde."
|
||||
},
|
||||
@@ -266,12 +269,6 @@
|
||||
"auth.sign-in.additional-options": {
|
||||
"message": "<forgot-password-link>Passwort vergessen?</forgot-password-link> • <create-account-link>Konto erstellen</create-account-link>"
|
||||
},
|
||||
"auth.sign-in.email-username.label": {
|
||||
"message": "E-Mail oder Nutzername"
|
||||
},
|
||||
"auth.sign-in.password.label": {
|
||||
"message": "Passwort"
|
||||
},
|
||||
"auth.sign-in.sign-in-with": {
|
||||
"message": "Anmelden mit"
|
||||
},
|
||||
@@ -284,24 +281,12 @@
|
||||
"auth.sign-up.action.create-account": {
|
||||
"message": "Konto erstellen"
|
||||
},
|
||||
"auth.sign-up.confirm-password.label": {
|
||||
"message": "Passwort bestätigen"
|
||||
},
|
||||
"auth.sign-up.email.label": {
|
||||
"message": "E-Mail"
|
||||
},
|
||||
"auth.sign-up.label.username": {
|
||||
"message": "Nutzername"
|
||||
},
|
||||
"auth.sign-up.legal-dislaimer": {
|
||||
"message": "Durch das erstellen eines Kontos stimmst du den <terms-link>Nutzungsbedingungen</terms-link> und <privacy-policy-link>Datenschutzrichtlinien</privacy-policy-link> von Modrinth zu."
|
||||
},
|
||||
"auth.sign-up.notification.password-mismatch.text": {
|
||||
"message": "Passwörter stimmen nicht überein!"
|
||||
},
|
||||
"auth.sign-up.password.label": {
|
||||
"message": "Passwort"
|
||||
},
|
||||
"auth.sign-up.sign-in-option.title": {
|
||||
"message": "Du hast bereits ein Konto?"
|
||||
},
|
||||
@@ -320,9 +305,6 @@
|
||||
"auth.verify-email.action.account-settings": {
|
||||
"message": "Kontoeinstellungen"
|
||||
},
|
||||
"auth.verify-email.action.sign-in": {
|
||||
"message": "Anmelden"
|
||||
},
|
||||
"auth.verify-email.already-verified.description": {
|
||||
"message": "Deine E-Mail ist bereits verifiziert!"
|
||||
},
|
||||
@@ -407,12 +389,6 @@
|
||||
"collection.label.curated-by": {
|
||||
"message": "Kuratiert von"
|
||||
},
|
||||
"collection.label.description": {
|
||||
"message": "Beschreibung"
|
||||
},
|
||||
"collection.label.details": {
|
||||
"message": "Details"
|
||||
},
|
||||
"collection.label.no-projects": {
|
||||
"message": "Noch keine Projekte in Sammlung"
|
||||
},
|
||||
@@ -431,27 +407,15 @@
|
||||
"collection.title": {
|
||||
"message": "{name} - Kollektion"
|
||||
},
|
||||
"common.no": {
|
||||
"message": "Nein"
|
||||
},
|
||||
"common.yes": {
|
||||
"message": "Ja"
|
||||
},
|
||||
"create-project-version.create-modal.stage.add-files.admonition": {
|
||||
"message": "Ergänzende Dateien dienen zur unterstützung von Ressourcen wie Quellcode, nicht für alternative Versionen oder Varianten."
|
||||
},
|
||||
"create.collection.cancel": {
|
||||
"message": "Abbrechen"
|
||||
},
|
||||
"create.collection.collection-info": {
|
||||
"message": "Deine neue Sammlung wird als eine öffentliche Sammlung {count, plural, =0 {ohne Projekte} one {mit # Projekt} other {mit # Projekten}} erstellt."
|
||||
},
|
||||
"create.collection.create-collection": {
|
||||
"message": "Sammlung erstellen"
|
||||
},
|
||||
"create.collection.error-title": {
|
||||
"message": "Ein Fehler ist aufgetreten"
|
||||
},
|
||||
"create.collection.name-label": {
|
||||
"message": "Name"
|
||||
},
|
||||
@@ -503,15 +467,9 @@
|
||||
"create.limit-alert.type-project": {
|
||||
"message": "Projekt"
|
||||
},
|
||||
"create.organization.cancel": {
|
||||
"message": "Abbrechen"
|
||||
},
|
||||
"create.organization.create-organization": {
|
||||
"message": "Organisation erstellen"
|
||||
},
|
||||
"create.organization.error-title": {
|
||||
"message": "Ein Fehler ist aufgetreten"
|
||||
},
|
||||
"create.organization.name-label": {
|
||||
"message": "Name"
|
||||
},
|
||||
@@ -536,15 +494,9 @@
|
||||
"create.organization.url-label": {
|
||||
"message": "URL"
|
||||
},
|
||||
"create.project.cancel": {
|
||||
"message": "Abbrechen"
|
||||
},
|
||||
"create.project.create-project": {
|
||||
"message": "Projekt erstellen"
|
||||
},
|
||||
"create.project.error-title": {
|
||||
"message": "Ein Fehler ist aufgetreten"
|
||||
},
|
||||
"create.project.name-label": {
|
||||
"message": "Name"
|
||||
},
|
||||
@@ -569,9 +521,6 @@
|
||||
"create.project.visibility-description": {
|
||||
"message": "Die Sichtbarkeit deines Projekts nach der Überprüfung."
|
||||
},
|
||||
"create.project.visibility-label": {
|
||||
"message": "Sichtbarkeit"
|
||||
},
|
||||
"create.project.visibility-private": {
|
||||
"message": "Privat"
|
||||
},
|
||||
@@ -779,15 +728,9 @@
|
||||
"dashboard.creator-withdraw-modal.paypal-details.paypal-auth-description": {
|
||||
"message": "Verbinde dein PayPal-Konto um Zahlungen direkt zu erhalten."
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.paypal-details.save-button": {
|
||||
"message": "Speichern"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.paypal-details.save-success": {
|
||||
"message": "Venmo-Benutzername erfolgreich gespeichert!"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.paypal-details.saved-button": {
|
||||
"message": "Gespeichert"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.paypal-details.sign-in-with-paypal": {
|
||||
"message": "Mit PayPal anmelden"
|
||||
},
|
||||
@@ -806,18 +749,9 @@
|
||||
"dashboard.creator-withdraw-modal.stage.method-selection": {
|
||||
"message": "Methode"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.stage.muralpay-details": {
|
||||
"message": "Kontodetails"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.stage.muralpay-kyc": {
|
||||
"message": "Verifizierung"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.stage.tax-form": {
|
||||
"message": "Steuerformular"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.stage.tremendous-details": {
|
||||
"message": "Details"
|
||||
},
|
||||
"dashboard.creator-withdraw-modal.tax-form-required.body": {
|
||||
"message": "Um dein vollständiges Guthaben von <b>{available}</b> abzuheben musst du das unten stehende Formular ausfüllen. Dies wird für die Steuererklärung benötigt und muss nur einmal ausgefüllt werden."
|
||||
},
|
||||
@@ -897,7 +831,7 @@
|
||||
"message": "Geschätzt {date}"
|
||||
},
|
||||
"dashboard.revenue.processing": {
|
||||
"message": "Verarbeitet"
|
||||
"message": "In verarbeitung"
|
||||
},
|
||||
"dashboard.revenue.processing.tooltip": {
|
||||
"message": "Einnahmen bleiben in bearbeitung bis zum ende des Monats, und werden 60 Tage danach verfügbar."
|
||||
@@ -947,9 +881,6 @@
|
||||
"dashboard.withdraw.completion.amount": {
|
||||
"message": "Menge"
|
||||
},
|
||||
"dashboard.withdraw.completion.close-button": {
|
||||
"message": "Schliessen"
|
||||
},
|
||||
"dashboard.withdraw.completion.date": {
|
||||
"message": "Datum"
|
||||
},
|
||||
@@ -987,19 +918,19 @@
|
||||
"message": "Konto nicht verknüpft"
|
||||
},
|
||||
"dashboard.withdraw.error.email-verification.text": {
|
||||
"message": "Du musst deine E-Mail-Adresse bestätigen, bevor du Geld abheben kannst."
|
||||
"message": "Du musst deine E-Mail-Adresse bestätigen, bevor du Geld auszahlen kannst."
|
||||
},
|
||||
"dashboard.withdraw.error.email-verification.title": {
|
||||
"message": "E-Mail-Bestätigung erforderlich"
|
||||
},
|
||||
"dashboard.withdraw.error.generic.text": {
|
||||
"message": "Wir konnten deine Auszahlungsanforderung nicht übermitteln. Bitte überprüfe deine Angaben oder wende dich an den Support.\n{error}"
|
||||
"message": "Wir konnten deine Auszahlungsanforderung nicht übermitteln. Bitte überprüfe deine Angaben oder kontaktiere den Support.\n{error}"
|
||||
},
|
||||
"dashboard.withdraw.error.generic.title": {
|
||||
"message": "Abheben nicht möglich"
|
||||
},
|
||||
"dashboard.withdraw.error.insufficient-balance.text": {
|
||||
"message": "Du hast nicht genug Guthaben, um eine Auszahlung vorzunehmen."
|
||||
"message": "Du hast nicht genug Guthaben, um diese Auszahlung vorzunehmen."
|
||||
},
|
||||
"dashboard.withdraw.error.insufficient-balance.title": {
|
||||
"message": "Unzureichender Kontostand"
|
||||
@@ -1029,7 +960,7 @@
|
||||
"message": "Menge zu gering"
|
||||
},
|
||||
"dashboard.withdraw.error.paypal-country-mismatch.text": {
|
||||
"message": "Bitte nutze die richtige PayPal-Überweisungsoption für deine Region (USA oder International)."
|
||||
"message": "Bitte nutze die richtige PayPal-Überweisungsoption für deine Region (US oder International)."
|
||||
},
|
||||
"dashboard.withdraw.error.paypal-country-mismatch.title": {
|
||||
"message": "PayPal-Region stimmt nicht überein"
|
||||
@@ -1133,15 +1064,216 @@
|
||||
"frog.altText": {
|
||||
"message": "Ein fotorealistisches Gemälde eines Frosch-Labyrinths"
|
||||
},
|
||||
"frog.froggedPeople": {
|
||||
"message": "{count, plural, one {{count} weitere Person wurde} other {{count} weitere Personen wuden}} ebenfalls gefroscht!"
|
||||
},
|
||||
"frog.sinceOpened": {
|
||||
"message": "Diese Seite wurde {ago} geöffnet"
|
||||
},
|
||||
"frog.title": {
|
||||
"message": "Frosch"
|
||||
},
|
||||
"hosting-marketing.available-locations": {
|
||||
"message": "Verfügbar in Nordamerika, Europa und Südostasien für eine breite Abdeckung."
|
||||
},
|
||||
"hosting-marketing.billing.monthly": {
|
||||
"message": "Monatlich zahlen"
|
||||
},
|
||||
"hosting-marketing.billing.quarterly": {
|
||||
"message": "Vierteljährlich zahlen"
|
||||
},
|
||||
"hosting-marketing.billing.save-with-quarterly": {
|
||||
"message": "Spare 16% mit vierteljärlicher Abrechnung!"
|
||||
},
|
||||
"hosting-marketing.billing.starting-at": {
|
||||
"message": "Ab {price} / Monat"
|
||||
},
|
||||
"hosting-marketing.billing.yearly": {
|
||||
"message": "Jährlich zahlen"
|
||||
},
|
||||
"hosting-marketing.faq.burst-threads": {
|
||||
"message": "Wie funktionieren CPU-Burst-Threads?"
|
||||
},
|
||||
"hosting-marketing.faq.burst-threads.answer": {
|
||||
"message": "Wenn dein Server stark ausgelastet ist, geben wir ihm vorübergehend Zugriff auf zusätzliche CPU-Threads, um Lagspikes und Instabilität zu verringern. So wird verhindert, dass die TPS unter 20 fällt, und ein möglichst reibungsloses Erlebnis gewährleistet. Da diese zusätzlichen CPU-Threads nur kurzzeitig während Zeiten hoher Auslastung verfügbar sind, werden sie möglicherweise nicht in Spark-Berichten oder anderen Profiling-Tools angezeigt."
|
||||
},
|
||||
"hosting-marketing.faq.cpu-kind": {
|
||||
"message": "Auf welchen CPUs laufen die Server von Modrinth Hosting?"
|
||||
},
|
||||
"hosting-marketing.faq.cpu-kind.answer": {
|
||||
"message": "Die Server von Modrinth Hosting werden von AMD Ryzen 7900 und 7950X3D-äquivalenten CPUs mit 5+ GHz betrieben, kombiniert mit DDR5-Speicher."
|
||||
},
|
||||
"hosting-marketing.faq.currency": {
|
||||
"message": "In welcher Währung sind die Preise angegeben?"
|
||||
},
|
||||
"hosting-marketing.faq.currency.answer": {
|
||||
"message": "All Preise werden in US-Dollar (USD) angegeben."
|
||||
},
|
||||
"hosting-marketing.faq.ddos-protection": {
|
||||
"message": "Haben die Server von Modrinth Hosting DDoS-Schutz?"
|
||||
},
|
||||
"hosting-marketing.faq.ddos-protection.answer": {
|
||||
"message": "Ja. Alle Server von Modrinth Hosting sind mit DDoS-Schutz ausgestattet, an einigen Standorten mit einer Kapazität von bis zu 17 Tbit/s."
|
||||
},
|
||||
"hosting-marketing.faq.heading": {
|
||||
"message": "Häufig gestellte Fragen"
|
||||
},
|
||||
"hosting-marketing.faq.how-fast": {
|
||||
"message": "Wie schnell sind Server von Modrinth Hosting?"
|
||||
},
|
||||
"hosting-marketing.faq.how-fast.answer.one": {
|
||||
"message": "Server von Modrinth Hosting werden auf sehr moderner, leistungsstarker Hardware gehostet, doch es ist schwer zu sagen, wie sich dies genau auf die Geschwindigkeit deines Servers auswirkt, da es so viele Faktoren gibt, die diese beeinflussen, wie beispielsweise die Mods, Datenpakete oder Plugins, die du auf deinem Server ausführst, und sogar das Verhalten der Nutzer."
|
||||
},
|
||||
"hosting-marketing.faq.how-fast.answer.two": {
|
||||
"message": "Die meisten Leistungsprobleme entstehen in der Regel durch ein nicht optimiertes Modpack, Mod, Datenpaket oder Plugin, das zu Lag auf dem Server führt. Da unsere Server sehr leistungsstark sind, solltest du keine großen Probleme haben, solange du einen geeigneten Plan für die Inhalte wählst, die du auf dem Server ausführst."
|
||||
},
|
||||
"hosting-marketing.faq.increase-storage": {
|
||||
"message": "Kann ich den Speicherplatz meines Servers erhöhen?"
|
||||
},
|
||||
"hosting-marketing.faq.increase-storage.answer": {
|
||||
"message": "Ja, der Speicherplatz auf deinem Server kann ohne zusätzliche Kosten erweitert werden. Wenn du mehr Speicherplatz benötigst, wende dich bitte an den Modrinth-Support."
|
||||
},
|
||||
"hosting-marketing.faq.location": {
|
||||
"message": "Wo befinden sich Server von Modrinth Hosting? Kann ich eine Region auswählen?"
|
||||
},
|
||||
"hosting-marketing.faq.location.answer": {
|
||||
"message": "Derzeit sind Server in Nordamerika, Europa und Südostasien verfügbar, die du beim Kauf auswählen kannst. Weitere Regionen werden in Zukunft dazukommen! Falls du deine Region wechseln möchtest, wende dich bitte an den Support."
|
||||
},
|
||||
"hosting-marketing.faq.versions-loaders": {
|
||||
"message": "Welche Minecraft-Versionen und Loader können verwendet werden?"
|
||||
},
|
||||
"hosting-marketing.faq.versions-loaders.answer.one": {
|
||||
"message": "Server von Modrinth Hosting können jede Version von Minecraft: Java Edition bis zurück zur Version 1.2.5 ausführen, einschließlich Snapshot-Versionen."
|
||||
},
|
||||
"hosting-marketing.faq.versions-loaders.answer.two": {
|
||||
"message": "Wir unterstützen außerdem eine Vielzahl von Mod- und Plugin-Loadern, darunter Fabric, Quilt, Forge und NeoForge für Mods sowie Paper und Purpur für Plugins. Die Verfügbarkeit hängt davon ab, ob der Mod- oder Plugin-Loader die ausgewählte Minecraft-Version unterstützt."
|
||||
},
|
||||
"hosting-marketing.get-started": {
|
||||
"message": "Loslegen"
|
||||
},
|
||||
"hosting-marketing.hero.button.manage-your-servers": {
|
||||
"message": "Verwalte deine Server"
|
||||
},
|
||||
"hosting-marketing.hero.button.start-a-new-server": {
|
||||
"message": "Starte einen neuen Server"
|
||||
},
|
||||
"hosting-marketing.hero.button.start-your-server": {
|
||||
"message": "Starte deinen Server"
|
||||
},
|
||||
"hosting-marketing.hero.host-with-modrinth": {
|
||||
"message": "Hoste deinen nächsten Server mit Modrinth Hosting"
|
||||
},
|
||||
"hosting-marketing.hero.hosting-description": {
|
||||
"message": "Modrinth Hosting ist der einfachste Weg, deinen eigenen Minecraft: Java Edition-Server zu hosten. Installiere und spiele deine Lieblings-Mods und Modpacks nahtlos innerhalb der Modrinth-Plattform."
|
||||
},
|
||||
"hosting-marketing.included.advanced-networking": {
|
||||
"message": "Fortgeschrittenes Netzwerkmanagement"
|
||||
},
|
||||
"hosting-marketing.included.advanced-networking.description": {
|
||||
"message": "Füge deinem Server deine eigene Domain hinzu, reserviere bis zu 15 Ports für Mods, die diese benötigen, und vieles mehr."
|
||||
},
|
||||
"hosting-marketing.included.backups-included": {
|
||||
"message": "Backups inklusive"
|
||||
},
|
||||
"hosting-marketing.included.backups-included.description": {
|
||||
"message": "Jeder Server verfügt über 15 Backups, die sicher an einem externen Standort gespeichert werden."
|
||||
},
|
||||
"hosting-marketing.included.custom-url": {
|
||||
"message": "Benutzerdefinierte URL"
|
||||
},
|
||||
"hosting-marketing.included.custom-url.description": {
|
||||
"message": "Teile deinen Server mit einer benutzerdefinierten <contrast>modrinth.gg</contrast>-URL."
|
||||
},
|
||||
"hosting-marketing.included.description": {
|
||||
"message": "Jeder Server verfügt über eine Vielzahl von Funktionen, die ein Hosting-Erlebnis ermöglichen, wie es nur Modrinth bieten kann."
|
||||
},
|
||||
"hosting-marketing.included.file-manager": {
|
||||
"message": "Einfach zu bedienender Dateimanager"
|
||||
},
|
||||
"hosting-marketing.included.file-manager.description": {
|
||||
"message": "Suche, verwalte, bearbeite und lade Dateien ganz einfach direkt auf deinen Server hoch."
|
||||
},
|
||||
"hosting-marketing.included.heading": {
|
||||
"message": "Mit allen Funktionen, die du benötigst."
|
||||
},
|
||||
"hosting-marketing.included.help": {
|
||||
"message": "Hilfe wenn du sie brauchst"
|
||||
},
|
||||
"hosting-marketing.included.help.description": {
|
||||
"message": "Wende dich jederzeit an das Modrinth-Team, falls du Hilfe mit deinem Server benötigst."
|
||||
},
|
||||
"hosting-marketing.included.powerful-console": {
|
||||
"message": "Eine leistungsstarke Konsole, ein Servereigenschaften-Manager und vieles mehr"
|
||||
},
|
||||
"hosting-marketing.included.powerful-console.description": {
|
||||
"message": "Modrinth Hosting bietet leistungsstarke Tools zur Verwaltung deines Servers."
|
||||
},
|
||||
"hosting-marketing.included.sftp-access": {
|
||||
"message": "Zugriff über SFTP"
|
||||
},
|
||||
"hosting-marketing.included.sftp-access.description": {
|
||||
"message": "Greife mit dem in Modrinth Hosting integrierten SFTP direkt auf die Dateien deines Servers zu."
|
||||
},
|
||||
"hosting-marketing.included.with-your-server": {
|
||||
"message": "Bei deinem Server enthalten"
|
||||
},
|
||||
"hosting-marketing.know-what-you-need": {
|
||||
"message": "Du weißt genau, was du brauchst?"
|
||||
},
|
||||
"hosting-marketing.medal.info": {
|
||||
"message": "Teste 5 Tage lang kostenlos einen <orange>3 GB Server</orange>, unterstützt von <orange>Medal</orange>"
|
||||
},
|
||||
"hosting-marketing.medal.learn-more": {
|
||||
"message": "Mehr erfahren"
|
||||
},
|
||||
"hosting-marketing.medal.text-secondary": {
|
||||
"message": "Zeitlich begrenztes Angebot. Keine Kreditkarte erforderlich. Verfügbar für US-Server."
|
||||
},
|
||||
"hosting-marketing.pick-customized-plan": {
|
||||
"message": "Wähle einen individuellen Plan mit genau den Spezifikationen, die du benötigst."
|
||||
},
|
||||
"hosting-marketing.server-for-everyone": {
|
||||
"message": "Für jeden gibt es einen Server"
|
||||
},
|
||||
"hosting-marketing.why.all-on-modrinth": {
|
||||
"message": "Verwalte alles auf Modrinth"
|
||||
},
|
||||
"hosting-marketing.why.all-on-modrinth.description": {
|
||||
"message": "Dein Server, deine Mods, deine Spieler und vieles mehr befinden sich alle auf Modrinth. Du musst nicht zwischen verschiedenen Plattformen wechseln."
|
||||
},
|
||||
"hosting-marketing.why.consistently-fast": {
|
||||
"message": "Konstant schnell"
|
||||
},
|
||||
"hosting-marketing.why.consistently-fast.description": {
|
||||
"message": "Unsere Infrastruktur ist niemals überlastet, was bedeutet, dass jeder bei Modrinth gehostete Server stets mit voller Leistung läuft."
|
||||
},
|
||||
"hosting-marketing.why.description": {
|
||||
"message": "Wähle aus Tausenden von Modpacks auf Modrinth oder erstelle dein eigenes. Lade deine Freunde ein, wenn du bereit bist zu spielen."
|
||||
},
|
||||
"hosting-marketing.why.heading": {
|
||||
"message": "Finde ein Modpack. Jetzt ist es ein Server."
|
||||
},
|
||||
"hosting-marketing.why.modern-reliable-hosting": {
|
||||
"message": "Entdecke modernes, zuverlässiges Hosting"
|
||||
},
|
||||
"hosting-marketing.why.modern-reliable-hosting.description": {
|
||||
"message": "Server von Modrinth Hosting werden auf <contrast>leistungsstarken AMD-CPUs mit DDR5-Arbeitsspeicher</contrast> gehostet und laufen mit speziell entwickelter Software, um einen reibungslosen Betrieb deines Servers zu ermöglichen."
|
||||
},
|
||||
"hosting-marketing.why.where-mods-are": {
|
||||
"message": "Spiele da, wo deine Mods sind"
|
||||
},
|
||||
"hosting-marketing.why.where-mods-are.description": {
|
||||
"message": "Modrinth Hosting integriert die Installation von Mods und Modpacks nahtlos in deinen Server."
|
||||
},
|
||||
"hosting-marketing.why.why-modrinth-hosting": {
|
||||
"message": "Warum Modrinth Hosting?"
|
||||
},
|
||||
"hosting-marketing.why.your-favorite-mods": {
|
||||
"message": "Alle deine Lieblingsmods"
|
||||
},
|
||||
"hosting-marketing.why.your-favorite-mods.description": {
|
||||
"message": "Wähle zwischen Vanilla, Fabric, Forge, Quilt und NeoForge. Was auf Modrinth ist, kann auf deinem Server laufen."
|
||||
},
|
||||
"hosting.plan.out-of-stock": {
|
||||
"message": "Nicht verfügbar"
|
||||
},
|
||||
"hosting.plan.select-plan": {
|
||||
"message": "Plan auswählen"
|
||||
},
|
||||
"landing.button.discover-mods": {
|
||||
"message": "Entdecke Mods"
|
||||
},
|
||||
@@ -1253,15 +1385,6 @@
|
||||
"landing.notifications.version-released": {
|
||||
"message": "Version {version} wurde für {gameVersion} veröffentlicht"
|
||||
},
|
||||
"landing.search.label": {
|
||||
"message": "Suche"
|
||||
},
|
||||
"landing.search.placeholder": {
|
||||
"message": "Suche..."
|
||||
},
|
||||
"landing.search.sort-by.label": {
|
||||
"message": "Sortieren nach"
|
||||
},
|
||||
"landing.section.for-creators.description": {
|
||||
"message": "Gib deinen Kreationen ein Online-Zuhause und erreiche ein riesiges Publikum engagierter Spieler."
|
||||
},
|
||||
@@ -1337,6 +1460,12 @@
|
||||
"layout.banner.build-fail.title": {
|
||||
"message": "Fehler beim generieren des Status von der API beim erstellen."
|
||||
},
|
||||
"layout.banner.preview.description": {
|
||||
"message": "Falls du die offizielle Modrinth-Website aufrufen wolltest, besuch <link>https://modrinth.com</link>. Diese Vorschauversion wird von Modrinth-Mitarbeitern zu Testzwecken genutzt. Sie wurde unter Verwendung von <branch-link>{owner}/{branch}</branch-link> @ {commit} erstellt."
|
||||
},
|
||||
"layout.banner.preview.title": {
|
||||
"message": "Dies ist eine Vorschauversion der Modrinth-Webseite."
|
||||
},
|
||||
"layout.banner.staging.description": {
|
||||
"message": "Die Staging-Umgebung ist komplett separat von der Produktions-Datenbank von Modrinth. Sie wird zu Test- und Debugging-Zwecken verwendet und könnte Entwicklungsversionen des Modrinth-Backends oder -Frontends, welche neuer als die Produkionsinstanz sind, ausführen."
|
||||
},
|
||||
@@ -1481,9 +1610,6 @@
|
||||
"layout.nav.active-reports": {
|
||||
"message": "Aktive Meldungen"
|
||||
},
|
||||
"layout.nav.analytics": {
|
||||
"message": "Analysen"
|
||||
},
|
||||
"layout.nav.discover": {
|
||||
"message": "Entdecken"
|
||||
},
|
||||
@@ -1532,9 +1658,6 @@
|
||||
"layout.nav.upgrade-to-modrinth-plus": {
|
||||
"message": "Auf Modrinth+ upgraden"
|
||||
},
|
||||
"moderation.filter.by": {
|
||||
"message": "Filtern nach"
|
||||
},
|
||||
"moderation.moderate": {
|
||||
"message": "Moderieren"
|
||||
},
|
||||
@@ -1547,12 +1670,6 @@
|
||||
"moderation.page.technicalReview": {
|
||||
"message": "Technische Überprüfung"
|
||||
},
|
||||
"moderation.search.placeholder": {
|
||||
"message": "Suche..."
|
||||
},
|
||||
"moderation.sort.by": {
|
||||
"message": "Sortieren nach"
|
||||
},
|
||||
"muralpay.account-type.checking": {
|
||||
"message": "Girokonto"
|
||||
},
|
||||
@@ -1880,18 +1997,12 @@
|
||||
"profile.label.collection": {
|
||||
"message": "Kollektion"
|
||||
},
|
||||
"profile.label.details": {
|
||||
"message": "Details"
|
||||
},
|
||||
"profile.label.downloads": {
|
||||
"message": "{count} {count, plural, one {Download} other {Downloads}}"
|
||||
},
|
||||
"profile.label.joined": {
|
||||
"message": "Beigetreten"
|
||||
},
|
||||
"profile.label.no": {
|
||||
"message": "Nein"
|
||||
},
|
||||
"profile.label.no-collections": {
|
||||
"message": "Dieser Nutzer hat keine Kollektionen!"
|
||||
},
|
||||
@@ -1913,9 +2024,6 @@
|
||||
"profile.label.saving": {
|
||||
"message": "Speichert..."
|
||||
},
|
||||
"profile.label.yes": {
|
||||
"message": "Ja"
|
||||
},
|
||||
"profile.meta.description": {
|
||||
"message": "Lade {username}'s Projekte auf Modrinth herunter"
|
||||
},
|
||||
@@ -1928,15 +2036,6 @@
|
||||
"profile.user-id": {
|
||||
"message": "Benutzer ID: {id}"
|
||||
},
|
||||
"project-member-header.accept": {
|
||||
"message": "Akzeptieren"
|
||||
},
|
||||
"project-member-header.decline": {
|
||||
"message": "Ablehnen"
|
||||
},
|
||||
"project-member-header.error": {
|
||||
"message": "Fehler"
|
||||
},
|
||||
"project-member-header.error-decline": {
|
||||
"message": "Ablehnen der Team-Einladung fehlgeschlagen"
|
||||
},
|
||||
@@ -1952,9 +2051,6 @@
|
||||
"project-member-header.invitation-with-role": {
|
||||
"message": "Du wurdest eingeladen, ein Mitglied mit der Rolle \"{role}\" für dieses Projekt zu werden."
|
||||
},
|
||||
"project-member-header.success": {
|
||||
"message": "Erfolg"
|
||||
},
|
||||
"project-member-header.success-decline": {
|
||||
"message": "Du hast die Team-Einladung abgelehnt"
|
||||
},
|
||||
@@ -2582,6 +2678,9 @@
|
||||
"scopes.versionWrite.label": {
|
||||
"message": "Schreibzugriff Versionsdaten"
|
||||
},
|
||||
"search.filter.game-version-shader-message": {
|
||||
"message": "Shaderpakete für ältere Versionen funktionieren höchstwahrscheinlich auch auf neueren Versionen mit nur kleineren Problemen."
|
||||
},
|
||||
"search.filter.locked.server": {
|
||||
"message": "Vom Server bereitgestellt"
|
||||
},
|
||||
@@ -2669,9 +2768,6 @@
|
||||
"settings.billing.payment_method.action.primary": {
|
||||
"message": "Als primär festlegen"
|
||||
},
|
||||
"settings.billing.payment_method.card_display": {
|
||||
"message": "{card_brand} endet in {last_four}"
|
||||
},
|
||||
"settings.billing.payment_method.card_expiry": {
|
||||
"message": "Läuft ab {month}.{year}"
|
||||
},
|
||||
@@ -2684,42 +2780,6 @@
|
||||
"settings.billing.payment_method.title": {
|
||||
"message": "Zahlungsmethoden"
|
||||
},
|
||||
"settings.billing.payment_method_type.amazon_pay": {
|
||||
"message": "Amazon Pay"
|
||||
},
|
||||
"settings.billing.payment_method_type.amex": {
|
||||
"message": "American Express"
|
||||
},
|
||||
"settings.billing.payment_method_type.cashapp": {
|
||||
"message": "Cash App"
|
||||
},
|
||||
"settings.billing.payment_method_type.diners": {
|
||||
"message": "Diners Club"
|
||||
},
|
||||
"settings.billing.payment_method_type.discover": {
|
||||
"message": "Discover"
|
||||
},
|
||||
"settings.billing.payment_method_type.eftpos": {
|
||||
"message": "EFTPOS"
|
||||
},
|
||||
"settings.billing.payment_method_type.jcb": {
|
||||
"message": "JCB"
|
||||
},
|
||||
"settings.billing.payment_method_type.mastercard": {
|
||||
"message": "MasterCard"
|
||||
},
|
||||
"settings.billing.payment_method_type.paypal": {
|
||||
"message": "PayPal"
|
||||
},
|
||||
"settings.billing.payment_method_type.unionpay": {
|
||||
"message": "UnionPay"
|
||||
},
|
||||
"settings.billing.payment_method_type.unknown": {
|
||||
"message": "Unbekannte Zahlungsmethode"
|
||||
},
|
||||
"settings.billing.payment_method_type.visa": {
|
||||
"message": "Visa"
|
||||
},
|
||||
"settings.billing.pyro_subscription.description": {
|
||||
"message": "Verwalte deine Modrinth Server Abonnements."
|
||||
},
|
||||
@@ -2873,18 +2933,12 @@
|
||||
"settings.profile.profile-info": {
|
||||
"message": "Profilinformationen"
|
||||
},
|
||||
"settings.profile.profile-picture.reset": {
|
||||
"message": "Zurücksetzen"
|
||||
},
|
||||
"settings.profile.profile-picture.title": {
|
||||
"message": "Profilbild"
|
||||
},
|
||||
"settings.profile.username.description": {
|
||||
"message": "Ein eindeutiger Name (ohne berücksichtigung der Gross-/Kleinschreibung) zur identifikation deines Profils."
|
||||
},
|
||||
"settings.profile.username.title": {
|
||||
"message": "Benutzername"
|
||||
},
|
||||
"settings.sessions.action.revoke-session": {
|
||||
"message": "Sitzung widerrufen"
|
||||
},
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user