mirror of
https://github.com/Drop-OSS/drop.git
synced 2025-11-13 16:22:39 +10:00
Compare commits
16 Commits
main
...
1903bb1a5f
| Author | SHA1 | Date | |
|---|---|---|---|
| 1903bb1a5f | |||
| 504cba3b36 | |||
| fa4a6ff7b5 | |||
| 2f14667703 | |||
| e722f2d6ae | |||
| 9849a0ad4b | |||
| 214e926891 | |||
| 8d9fe4998c | |||
| d8ab2df6fd | |||
| a12a7db76e | |||
| 2a005a2222 | |||
| 3942d5c442 | |||
| a520d52ad3 | |||
| aa1de921ee | |||
| bfeacbbdfe | |||
| afce9f159a |
18
.github/workflows/ci.yml
vendored
18
.github/workflows/ci.yml
vendored
@ -21,17 +21,20 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
|
- name: Install pnpm
|
||||||
|
uses: pnpm/action-setup@v4
|
||||||
|
|
||||||
- name: Setup Node.js environment
|
- name: Setup Node.js environment
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: lts/*
|
node-version: lts/*
|
||||||
cache: "yarn"
|
cache: "pnpm"
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: yarn install --immutable --network-timeout 1000000
|
run: pnpm install
|
||||||
|
|
||||||
- name: Typecheck
|
- name: Typecheck
|
||||||
run: yarn typecheck
|
run: pnpm run typecheck
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
name: Lint
|
name: Lint
|
||||||
@ -42,14 +45,17 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
|
- name: Install pnpm
|
||||||
|
uses: pnpm/action-setup@v4
|
||||||
|
|
||||||
- name: Setup Node.js environment
|
- name: Setup Node.js environment
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: lts/*
|
node-version: lts/*
|
||||||
cache: "yarn"
|
cache: "pnpm"
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: yarn install --immutable --network-timeout 1000000
|
run: pnpm install
|
||||||
|
|
||||||
- name: Lint
|
- name: Lint
|
||||||
run: yarn lint
|
run: pnpm run lint
|
||||||
|
|||||||
@ -1 +1,3 @@
|
|||||||
drop-base/
|
drop-base/
|
||||||
|
# file is fully managed by pnpm, no reason to break it
|
||||||
|
pnpm-lock.yaml
|
||||||
|
|||||||
39
Dockerfile
39
Dockerfile
@ -1,40 +1,45 @@
|
|||||||
# syntax=docker/dockerfile:1
|
# syntax=docker/dockerfile:1
|
||||||
|
|
||||||
|
FROM node:lts-alpine AS base
|
||||||
|
ENV PNPM_HOME="/pnpm"
|
||||||
|
ENV PATH="$PNPM_HOME:$PATH"
|
||||||
|
RUN corepack enable
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# so corepack knows pnpm's version
|
||||||
|
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
|
||||||
|
# prevent prompt to download
|
||||||
|
ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0
|
||||||
|
# setup for offline
|
||||||
|
RUN corepack pack
|
||||||
|
# don't call out to network anymore
|
||||||
|
ENV COREPACK_ENABLE_NETWORK=0
|
||||||
|
|
||||||
### Unified deps builder
|
### Unified deps builder
|
||||||
# FROM node:lts-alpine AS deps
|
FROM base AS deps
|
||||||
# WORKDIR /app
|
RUN pnpm install --frozen-lockfile --ignore-scripts
|
||||||
# COPY package.json yarn.lock ./
|
|
||||||
# RUN --mount=type=cache,target=/root/.yarn YARN_CACHE_FOLDER=/root/.yarn yarn install --network-timeout 1000000 --ignore-scripts
|
|
||||||
|
|
||||||
### Build for app
|
### Build for app
|
||||||
FROM node:lts-alpine AS build-system
|
FROM base AS build-system
|
||||||
# setup workdir - has to be the same filepath as app because fuckin' Prisma
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
ENV NUXT_TELEMETRY_DISABLED=1
|
ENV NUXT_TELEMETRY_DISABLED=1
|
||||||
# ENV YARN_CACHE_FOLDER=/root/.yarn
|
|
||||||
|
|
||||||
# add git so drop can determine its git ref at build
|
# add git so drop can determine its git ref at build
|
||||||
# pnpm for build
|
RUN apk add --no-cache git
|
||||||
RUN apk add --no-cache git pnpm
|
|
||||||
|
|
||||||
# copy deps and rest of project files
|
# copy deps and rest of project files
|
||||||
# COPY --from=deps /app/node_modules ./node_modules
|
COPY --from=deps /app/node_modules ./node_modules
|
||||||
COPY . .
|
COPY . .
|
||||||
|
|
||||||
ARG BUILD_DROP_VERSION
|
ARG BUILD_DROP_VERSION
|
||||||
ARG BUILD_GIT_REF
|
ARG BUILD_GIT_REF
|
||||||
|
|
||||||
# build
|
# build
|
||||||
RUN pnpm import
|
RUN pnpm run postinstall && pnpm run build
|
||||||
RUN pnpm install --shamefully-hoist
|
|
||||||
RUN pnpm run build
|
|
||||||
# RUN --mount=type=cache,target=/root/.yarn yarn postinstall && yarn build
|
|
||||||
|
|
||||||
### create run environment for Drop
|
### create run environment for Drop
|
||||||
FROM node:lts-alpine AS run-system
|
FROM base AS run-system
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
ENV NUXT_TELEMETRY_DISABLED=1
|
ENV NUXT_TELEMETRY_DISABLED=1
|
||||||
|
|||||||
Submodule drop-base updated: 04125e89be...06bea06363
@ -1,17 +1,18 @@
|
|||||||
{
|
{
|
||||||
"account": {
|
"account": {
|
||||||
"devices": {
|
"devices": {
|
||||||
"capabilities": "Möglichkeiten",
|
"capabilities": "Funktionen",
|
||||||
"lastConnected": "Zuletzt verbunden",
|
"lastConnected": "Zuletzt verbunden",
|
||||||
"noDevices": "Keine Geräte sind mit deinem Konto verbunden.",
|
"noDevices": "Keine Geräte sind mit deinem Konto verbunden.",
|
||||||
"platform": "Plattform",
|
"platform": "Plattform",
|
||||||
"revoke": "Wiederrufen",
|
"revoke": "Wiederrufen",
|
||||||
|
"subheader": "Geräte verwalten, die auf Ihr Drop Konto zugreifen dürfen.",
|
||||||
"title": "Geräte"
|
"title": "Geräte"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"all": "Alle anzeigen {arrow}",
|
"all": "Alles anzeigen {arrow}",
|
||||||
"desc": "Benachrichtigungen anzeigen und verwalten.",
|
"desc": "Anzeigen und Verwalten deiner Benachrichtigung.",
|
||||||
"markAllAsRead": "Alles als gelesen markieren",
|
"markAllAsRead": "Markiere alle als gelesen",
|
||||||
"markAsRead": "Als gelesen Markieren",
|
"markAsRead": "Als gelesen Markieren",
|
||||||
"none": "Keine Benachrichtigungen",
|
"none": "Keine Benachrichtigungen",
|
||||||
"notifications": "Benachrichtigungen",
|
"notifications": "Benachrichtigungen",
|
||||||
@ -19,17 +20,37 @@
|
|||||||
"unread": "Ungelesene Benachrichtigungen"
|
"unread": "Ungelesene Benachrichtigungen"
|
||||||
},
|
},
|
||||||
"settings": "Einstellungen",
|
"settings": "Einstellungen",
|
||||||
"title": "Kontoeinstellungen"
|
"title": "Kontoeinstellungen",
|
||||||
|
"token": {
|
||||||
|
"acls": "Berechtigungen (ACLs/Scopes)",
|
||||||
|
"aclsDesc": "Definiert, wozu dieses Schlüssel berechtigt ist. Du solltest vermeiden, alle ACLs auszuwählen, wenn dies nicht notwendig ist.",
|
||||||
|
"expiry": "Ablaufdatum",
|
||||||
|
"expiry3Month": "3 Monate",
|
||||||
|
"expiry5Year": "5 Jahre",
|
||||||
|
"expiry6Month": "6 Monate",
|
||||||
|
"expiryMonth": "Ein Monat",
|
||||||
|
"expiryYear": "Ein Jahr",
|
||||||
|
"name": "API-Schlüssel Name",
|
||||||
|
"nameDesc": "Der Name des Schlüssels, als Referenz.",
|
||||||
|
"namePlaceholder": "Mein neuer Schlüssel",
|
||||||
|
"noExpiry": "Unbegrenzt gültig",
|
||||||
|
"noTokens": "Keine Schlüssel mit deinem Konto verbunden.",
|
||||||
|
"revoke": "Wiederrufen",
|
||||||
|
"subheader": "Verwalte deine API-Schlüssel und deren Zugriffsrechte.",
|
||||||
|
"success": "Schlüssel erfolgreich erstellt.",
|
||||||
|
"successNote": "Bitte jetzt kopieren, da es nicht noch einmal angezeigt wird.",
|
||||||
|
"title": "API-Schlüssel"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"actions": "Aktionen",
|
"actions": "Aktionen",
|
||||||
"add": "Hinzufügen",
|
"add": "Hinzufügen",
|
||||||
"adminTitle": "Administrator Dashbord - Drop",
|
"adminTitle": "Admin Dashboard - Drop",
|
||||||
"adminTitleTemplate": "{0} - Administrator - Drop",
|
"adminTitleTemplate": "{0} - Admin - Drop",
|
||||||
"auth": {
|
"auth": {
|
||||||
"callback": {
|
"callback": {
|
||||||
"authClient": "Client autorisieren?",
|
"authClient": "Client autorisieren?",
|
||||||
"authorize": "Autorisieren",
|
"authorize": "Autorisieren",
|
||||||
"authorizedClient": "Drop hat den Client erfolgreich autorisiert. Du darfst dieses Fenster nun schließen.",
|
"authorizedClient": "Drop hat den Client erfolgreich autorisiert. Du kannst dieses Fenster nun schließen.",
|
||||||
"issues": "Probleme?",
|
"issues": "Probleme?",
|
||||||
"learn": "Mehr erfahren {arrow}",
|
"learn": "Mehr erfahren {arrow}",
|
||||||
"paste": "Füge diesen Code in den Client ein, um fortzufahren:",
|
"paste": "Füge diesen Code in den Client ein, um fortzufahren:",
|
||||||
@ -38,9 +59,10 @@
|
|||||||
"success": "Erfolgreich!"
|
"success": "Erfolgreich!"
|
||||||
},
|
},
|
||||||
"code": {
|
"code": {
|
||||||
"description": "Verwende ein Code, um dein Drop Client zu verbinden, wenn dein Gerät kein Webbrowser öffnen kann.",
|
"description": "Verwende einen Code, um dein Drop Client zu verbinden, wenn dein Gerät kein Webbrowser öffnen kann.",
|
||||||
"title": "Verbinde dein Drop Client"
|
"title": "Verbinde deinen Drop Client"
|
||||||
},
|
},
|
||||||
|
"confirmPassword": "Bestätige @:auth.password",
|
||||||
"displayName": "Anzeigename",
|
"displayName": "Anzeigename",
|
||||||
"email": "E-Mail",
|
"email": "E-Mail",
|
||||||
"password": "Passwort",
|
"password": "Passwort",
|
||||||
@ -55,10 +77,10 @@
|
|||||||
"signin": {
|
"signin": {
|
||||||
"externalProvider": "Bei externem Anbieter anmelden {arrow}",
|
"externalProvider": "Bei externem Anbieter anmelden {arrow}",
|
||||||
"forgot": "Passwort vergessen?",
|
"forgot": "Passwort vergessen?",
|
||||||
"noAccount": "Noch kein Konto? Bitten den Administrator, eines für dich zu erstellt.",
|
"noAccount": "Noch kein Konto? Bitte den Admin, eines für dich zu erstellen.",
|
||||||
"or": "ODER",
|
"or": "ODER",
|
||||||
"pageTitle": "Bei Drop anmelden",
|
"pageTitle": "Bei Drop anmelden",
|
||||||
"rememberMe": "An mich erinnern",
|
"rememberMe": "Erinnere mich",
|
||||||
"signin": "Anmelden",
|
"signin": "Anmelden",
|
||||||
"title": "Melde dich bei deinem Konto an"
|
"title": "Melde dich bei deinem Konto an"
|
||||||
},
|
},
|
||||||
@ -124,9 +146,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"disabled": "Ungültiges oder deaktiviertes Konto. Bitte kontaktiere einen Server Administrator.",
|
"disabled": "Ungültiges oder deaktiviertes Konto. Bitte kontaktiere einen Server Admin.",
|
||||||
"invalidInvite": "Ungültige oder abgelaufene Einladung",
|
"invalidInvite": "Ungültige oder abgelaufene Einladung",
|
||||||
"invalidPassState": "Ungültiger Passwortzustand. Bitte kontaktiere einen Server Administrator.",
|
"invalidPassState": "Ungültiger Passwortzustand. Bitte kontaktiere einen Server Admin.",
|
||||||
"invalidUserOrPass": "Ungültiger Nutzername oder Passwort.",
|
"invalidUserOrPass": "Ungültiger Nutzername oder Passwort.",
|
||||||
"inviteIdRequired": "id erforderlich beim Abrufen der Einladung",
|
"inviteIdRequired": "id erforderlich beim Abrufen der Einladung",
|
||||||
"method": {
|
"method": {
|
||||||
@ -135,6 +157,10 @@
|
|||||||
"usernameTaken": "Nutzername bereits vergeben."
|
"usernameTaken": "Nutzername bereits vergeben."
|
||||||
},
|
},
|
||||||
"backHome": "{arrow} Zurück zur Startseite",
|
"backHome": "{arrow} Zurück zur Startseite",
|
||||||
|
"externalUrl": {
|
||||||
|
"subtitle": "Diese Nachricht ist nur sichtbar für Admins.",
|
||||||
|
"title": "Zugriff über eine andere EXTERNAL_URL. Bitte die Dokumentation prüfen."
|
||||||
|
},
|
||||||
"game": {
|
"game": {
|
||||||
"banner": {
|
"banner": {
|
||||||
"description": "Das Aktualisieren des Banners ist fehlgeschlagen: {0}",
|
"description": "Das Aktualisieren des Banners ist fehlgeschlagen: {0}",
|
||||||
@ -192,6 +218,8 @@
|
|||||||
"occurred": "Bei der Bearbeitung deiner Anfrage ist ein Fehler aufgetreten. Wenn du glaubst, dass es sich um einen Bug handelt, melde diesen bitte. Versuche dich anzumelden, um zu sehen, ob dadurch das Problem behoben wird.",
|
"occurred": "Bei der Bearbeitung deiner Anfrage ist ein Fehler aufgetreten. Wenn du glaubst, dass es sich um einen Bug handelt, melde diesen bitte. Versuche dich anzumelden, um zu sehen, ob dadurch das Problem behoben wird.",
|
||||||
"ohNo": "Oh nein!",
|
"ohNo": "Oh nein!",
|
||||||
"pageTitle": "{0} | Drop",
|
"pageTitle": "{0} | Drop",
|
||||||
|
"revokeClient": "Client konnte nicht widerrufen werden",
|
||||||
|
"revokeClientFull": "Client konnte nicht widerrufen werden {0}",
|
||||||
"signIn": "Anmelden {arrow}",
|
"signIn": "Anmelden {arrow}",
|
||||||
"support": "Support Discord",
|
"support": "Support Discord",
|
||||||
"unknown": "Ein unbekannter Fehler ist aufgetreten",
|
"unknown": "Ein unbekannter Fehler ist aufgetreten",
|
||||||
@ -231,8 +259,13 @@
|
|||||||
},
|
},
|
||||||
"header": {
|
"header": {
|
||||||
"admin": {
|
"admin": {
|
||||||
"admin": "Administrator",
|
"admin": "Admin",
|
||||||
"settings": "Einstellungen",
|
"metadata": "Metadaten",
|
||||||
|
"settings": {
|
||||||
|
"store": "Store",
|
||||||
|
"title": "Einstellungen",
|
||||||
|
"tokens": "API-Schlüssel"
|
||||||
|
},
|
||||||
"tasks": "Aufgaben",
|
"tasks": "Aufgaben",
|
||||||
"users": "Benutzer"
|
"users": "Benutzer"
|
||||||
},
|
},
|
||||||
@ -240,6 +273,7 @@
|
|||||||
"openSidebar": "Öffne Seitenleiste"
|
"openSidebar": "Öffne Seitenleiste"
|
||||||
},
|
},
|
||||||
"helpUsTranslate": "Hilf uns Drop zu übersetzen {arrow}",
|
"helpUsTranslate": "Hilf uns Drop zu übersetzen {arrow}",
|
||||||
|
"highest": "Höchste",
|
||||||
"home": "Startseite",
|
"home": "Startseite",
|
||||||
"library": {
|
"library": {
|
||||||
"addGames": "Alle Spiele",
|
"addGames": "Alle Spiele",
|
||||||
@ -249,50 +283,117 @@
|
|||||||
"detectedVersion": "Drop hat erkannt, dass du eine neue Version dieses Spiels importieren kannst.",
|
"detectedVersion": "Drop hat erkannt, dass du eine neue Version dieses Spiels importieren kannst.",
|
||||||
"game": {
|
"game": {
|
||||||
"addCarouselNoImages": "Keine Bilder zum hinzufügen.",
|
"addCarouselNoImages": "Keine Bilder zum hinzufügen.",
|
||||||
"addDescriptionNoImages": "Keine Bilder zum hinzufügen."
|
"addDescriptionNoImages": "Keine Bilder zum hinzufügen.",
|
||||||
|
"addImageCarousel": "Aus der Bilderbibliothek hinzufügen",
|
||||||
|
"currentBanner": "Banner",
|
||||||
|
"currentCover": "Cover",
|
||||||
|
"deleteImage": "Bild löschen",
|
||||||
|
"editGameDescription": "Spielbeschreibung",
|
||||||
|
"editGameName": "Spielname",
|
||||||
|
"imageCarousel": "Bilderkarussell",
|
||||||
|
"imageCarouselDescription": "Anpassen, welche Bilder und in welcher Reihenfolge sie auf der Shop-Seite angezeigt werden.",
|
||||||
|
"imageCarouselEmpty": "Es wurden noch keine Bilder zum Karussell hinzugefügt.",
|
||||||
|
"imageLibrary": "Bilderbibliothek",
|
||||||
|
"imageLibraryDescription": "Bitte beachten: Alle hochgeladenen Bilder sind für alle Nutzer über die Browser-Entwicklertools zugänglich.",
|
||||||
|
"removeImageCarousel": "Bild entfernen",
|
||||||
|
"setBanner": "Als Banner festlegen",
|
||||||
|
"setCover": "Als Cover festlegen"
|
||||||
},
|
},
|
||||||
|
"gameLibrary": "Spielebibliothek",
|
||||||
"import": {
|
"import": {
|
||||||
|
"bulkImportDescription": "Auf dieser Seite wirst du nicht zur Importaufgabe weitergeleitet, sodass du mehrere Spiele nacheinander importieren kannst.",
|
||||||
|
"bulkImportTitle": "Massenimport Modus",
|
||||||
|
"import": "Import",
|
||||||
|
"link": "Import {arrow}",
|
||||||
|
"loading": "Spieldaten werden geladen…",
|
||||||
|
"search": "Suche",
|
||||||
|
"searchPlaceholder": "Fallout 4",
|
||||||
|
"selectDir": "Bitte wähle ein Verzeichnis aus…",
|
||||||
|
"selectGame": "Spiel zum Import auswählen",
|
||||||
|
"selectGamePlaceholder": "Bitte wähle ein Spiel aus…",
|
||||||
|
"selectGameSearch": "Spiel auswählen",
|
||||||
|
"selectPlatform": "Bitte wähle eine Plattform aus…",
|
||||||
"version": {
|
"version": {
|
||||||
|
"advancedOptions": "Erweiterte Optionen",
|
||||||
"import": "Version Importieren",
|
"import": "Version Importieren",
|
||||||
|
"installDir": "(Installationsverzeichnis)/",
|
||||||
|
"launchCmd": "Programm/Befehl starten",
|
||||||
"launchDesc": "Ausführbare Datei zum starten des Spiels",
|
"launchDesc": "Ausführbare Datei zum starten des Spiels",
|
||||||
"launchPlaceholder": "spiel.exe",
|
"launchPlaceholder": "spiel.exe",
|
||||||
"loadingVersion": "Lade Versionsmetadaten…",
|
"loadingVersion": "Lade Versionsmetadaten…",
|
||||||
"noAdv": "Keine erweiterten Optionen für diese Konfiguration.",
|
"noAdv": "Keine erweiterten Optionen für diese Konfiguration.",
|
||||||
"noVersions": "Keine Version zum importieren",
|
"noVersions": "Keine Version zum importieren",
|
||||||
|
"platform": "Plattformversion",
|
||||||
|
"setupCmd": "Installationsprogramm oder Befehl ausführen",
|
||||||
|
"setupDesc": "Wird einmal ausgeführt, wenn das Spiel installiert wird",
|
||||||
"setupMode": "Einrichtungsmodus",
|
"setupMode": "Einrichtungsmodus",
|
||||||
|
"setupModeDesc": "Wenn aktiviert, hat diese Version keinen Startbefehl und führt einfach die ausführbare Datei auf dem Computer des Nutzers aus. Nützlich für Spiele, die nur einen Installer bereitstellen und keine portablen Dateien.",
|
||||||
"setupPlaceholder": "setup.exe",
|
"setupPlaceholder": "setup.exe",
|
||||||
"umuLauncherId": "UMU Launcher ID",
|
"umuLauncherId": "UMU Launcher ID",
|
||||||
|
"umuOverride": "Überschreibe UMU Launcher Spiel ID",
|
||||||
|
"umuOverrideDesc": "Standardmäßig verwendet Drop beim Start über den UMU Launcher eine Nicht-ID. Um die richtigen Patches für manche Spiele zu erhalten, musst du dieses Feld eventuell manuell setzen.",
|
||||||
"updateMode": "Aktualisierungsmodus",
|
"updateMode": "Aktualisierungsmodus",
|
||||||
|
"updateModeDesc": "Wenn aktiviert, werden diese Dateien über die vorherige Version installiert (überschrieben). Werden mehrere ‚Update-Modi‘ hintereinander verwendet, werden sie in der angegebenen Reihenfolge angewendet.",
|
||||||
"version": "Wähle die Version für den Import aus"
|
"version": "Wähle die Version für den Import aus"
|
||||||
},
|
},
|
||||||
"withoutMetadata": "Ohne Metadaten importieren"
|
"withoutMetadata": "Ohne Metadaten importieren"
|
||||||
},
|
},
|
||||||
|
"libraryHint": "Keine Bibliotheken konfiguriert.",
|
||||||
|
"libraryHintDocsLink": "Was bedeutet das? {arrow}",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"companies": {
|
"companies": {
|
||||||
"action": "Verwalte {arrow}",
|
"action": "Verwalte {arrow}",
|
||||||
"addGame": {
|
"addGame": {
|
||||||
|
"description": "Wähle ein Spiel aus, das dem Unternehmen hinzugefügt werden soll, und lege fest, ob es als Entwickler, Publisher oder beides geführt werden soll.",
|
||||||
"developer": "Entwickler?",
|
"developer": "Entwickler?",
|
||||||
"noGames": "Keine Spiele zum hinzufügen",
|
"noGames": "Keine Spiele zum hinzufügen",
|
||||||
"publisher": "Publisher?"
|
"publisher": "Publisher?",
|
||||||
|
"title": "Verbinde das Spiel mit diesem Unternehmen"
|
||||||
},
|
},
|
||||||
|
"description": "Unternehmen organisieren Spiele danach, wer sie entwickelt oder veröffentlicht hat.",
|
||||||
"editor": {
|
"editor": {
|
||||||
"action": "Spiel hinzufügen {plus}",
|
"action": "Spiel hinzufügen {plus}",
|
||||||
|
"descriptionPlaceholder": "{'<'}Beschreibung{'>'}",
|
||||||
"developed": "Entwickelt",
|
"developed": "Entwickelt",
|
||||||
"libraryDescription": "Hinzufügen, bearbeiten oder entfernen, was diese Firma entwickelt und/oder veröffentlicht hat.",
|
"libraryDescription": "Hinzufügen, bearbeiten oder entfernen, was diese Firma entwickelt und/oder veröffentlicht hat.",
|
||||||
"libraryTitle": "Spielebibliothek",
|
"libraryTitle": "Spielebibliothek",
|
||||||
"noDescription": "(Keine Beschreibung)",
|
"noDescription": "(Keine Beschreibung)",
|
||||||
"published": "Veröffentlicht",
|
"published": "Veröffentlicht",
|
||||||
"uploadBanner": "Banner hochladen",
|
"uploadBanner": "Banner hochladen",
|
||||||
"uploadIcon": "Icon hochladen"
|
"uploadIcon": "Icon hochladen",
|
||||||
|
"websitePlaceholder": "{'<'}Webseite{'>'}"
|
||||||
},
|
},
|
||||||
"modals": {
|
"modals": {
|
||||||
|
"createDescription": "Erstelle ein Unternehmen, um deine Spiele besser zu organisieren.",
|
||||||
|
"createFieldDescription": "Unternehmensbeschreibung",
|
||||||
|
"createFieldDescriptionPlaceholder": "Ein kleines Indie-Studio, das…",
|
||||||
|
"createFieldName": "Unternehmensname",
|
||||||
|
"createFieldNamePlaceholder": "Mein neues Unternehmen…",
|
||||||
|
"createFieldWebsite": "Unternehmenswebseite",
|
||||||
|
"createFieldWebsitePlaceholder": "https://beispiel.de/",
|
||||||
|
"createTitle": "Unternehmen erstellen",
|
||||||
|
"nameDescription": "Bearbeite den Namen des Unternehmens. Wird verwendet, um neue Spielimporte zuzuordnen.",
|
||||||
|
"nameTitle": "Bearbeite Firmenname",
|
||||||
"shortDeckDescription": "Bearbeite die Firmenbeschreibung. Beeinträchtigt nicht die Lange (markdown) Beschreibung.",
|
"shortDeckDescription": "Bearbeite die Firmenbeschreibung. Beeinträchtigt nicht die Lange (markdown) Beschreibung.",
|
||||||
"shortDeckTitle": "Bearbeite Firmenbeschreibung"
|
"shortDeckTitle": "Bearbeite Firmenbeschreibung",
|
||||||
}
|
"websiteDescription": "„Bearbeite die Webseite des Unternehmens. Hinweis: Dies wird ein Link sein und bietet keinen Redirect-Schutz.",
|
||||||
|
"websiteTitle": "Unternehmenswebseite bearbeiten"
|
||||||
|
},
|
||||||
|
"noCompanies": "Keine Unternehmen",
|
||||||
|
"noGames": "Keine Spiele",
|
||||||
|
"search": "Suche Unternehmen…",
|
||||||
|
"searchGames": "Unternehmensspiele durchsuchen…",
|
||||||
|
"title": "Unternehmen"
|
||||||
},
|
},
|
||||||
"tags": {
|
"tags": {
|
||||||
"action": "Verwalte {arrow}",
|
"action": "Verwalte {arrow}",
|
||||||
"create": "Erstellen"
|
"create": "Erstellen",
|
||||||
|
"description": "Tags werden automatisch aus importierten Genres erstellt. Du kannst eigene Tags hinzufügen, um deine Spielbibliothek zu kategorisieren.",
|
||||||
|
"modal": {
|
||||||
|
"description": "Erstelle einen Tag, um deine Bibliothek zu organisieren.",
|
||||||
|
"title": "Tag erstellen"
|
||||||
|
},
|
||||||
|
"title": "Tags"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"metadataProvider": "Metadatenanbieter",
|
"metadataProvider": "Metadatenanbieter",
|
||||||
@ -301,13 +402,31 @@
|
|||||||
"offlineTitle": "Spiel offline",
|
"offlineTitle": "Spiel offline",
|
||||||
"openEditor": "Im Editor öffnen {arrow}",
|
"openEditor": "Im Editor öffnen {arrow}",
|
||||||
"openStore": "Im Store öffnen",
|
"openStore": "Im Store öffnen",
|
||||||
|
"shortDesc": "Kurzbeschreibung",
|
||||||
"sources": {
|
"sources": {
|
||||||
|
"create": "Quelle erstellen",
|
||||||
|
"createDesc": "Drop wird diese Quelle verwenden, um auf deine Spielbibliothek zuzugreifen und die Spiele verfügbar zu machen.",
|
||||||
|
"desc": "Konfiguriere deine Bibliotheksquellen, wo Drop nach neuen Spielen und Versionen zum Import suchen wird.",
|
||||||
|
"documentationLink": "Dokumentation {arrow}",
|
||||||
|
"edit": "Quelle bearbeiten",
|
||||||
|
"fsDesc": "Importiert Spiele von einem Pfad auf der Festplatte. Benötigt eine versionsbasierte Ordnerstruktur und unterstützt archivierte Spiele.",
|
||||||
|
"fsFlatDesc": "Importiert Spiele von einem Pfad auf der Festplatte, jedoch ohne separate Unterordner für Versionen. Nützlich beim Migrieren einer bestehenden Bibliothek zu Drop.",
|
||||||
|
"fsFlatTitle": "Kompatibilität",
|
||||||
"fsPath": "Pfad",
|
"fsPath": "Pfad",
|
||||||
"fsPathDesc": "Absoluter Pfad zur Spielebibliothek.",
|
"fsPathDesc": "Absoluter Pfad zur Spielebibliothek.",
|
||||||
"fsPathPlaceholder": "/mnt/spiele"
|
"fsPathPlaceholder": "/mnt/spiele",
|
||||||
|
"fsTitle": "Drop-Stil",
|
||||||
|
"link": "Quellen {arrow}",
|
||||||
|
"nameDesc": "Der Name deiner Quelle, als Referenz.",
|
||||||
|
"namePlaceholder": "Meine neue Quelle",
|
||||||
|
"sources": "Bibliotheksquellen",
|
||||||
|
"typeDesc": "Der Typ deiner Quelle. Ändert die erforderlichen Optionen.",
|
||||||
|
"working": "Funktioniert es?"
|
||||||
},
|
},
|
||||||
|
"subheader": "Wenn du Ordner zu deinen Bibliotheksquellen hinzufügst, erkennt Drop diese und fordert dich auf, sie zu importieren. Jedes Spiel muss importiert werden, bevor du eine Version importieren kannst.",
|
||||||
"title": "Bibliotheken",
|
"title": "Bibliotheken",
|
||||||
"version": {
|
"version": {
|
||||||
|
"delta": "Upgrade Modus",
|
||||||
"noVersions": "Du hast keine verfügbare Version dieses Spiels.",
|
"noVersions": "Du hast keine verfügbare Version dieses Spiels.",
|
||||||
"noVersionsAdded": "keine Versionen hinzugefügt"
|
"noVersionsAdded": "keine Versionen hinzugefügt"
|
||||||
},
|
},
|
||||||
@ -331,19 +450,30 @@
|
|||||||
"launcherOpen": "Im Launcher öffnen",
|
"launcherOpen": "Im Launcher öffnen",
|
||||||
"noGames": "Keine Spiele in der Bibliothek",
|
"noGames": "Keine Spiele in der Bibliothek",
|
||||||
"notFound": "Spiel nicht gefunden",
|
"notFound": "Spiel nicht gefunden",
|
||||||
"search": "Durchsuche Bibliothek…"
|
"search": "Durchsuche Bibliothek…",
|
||||||
|
"subheader": "Verwalte deine Spiele in Sammlungen für einen einfacheren Zugriff auf alle deine Spiele."
|
||||||
},
|
},
|
||||||
|
"lowest": "Niedrigste",
|
||||||
"news": {
|
"news": {
|
||||||
"article": {
|
"article": {
|
||||||
"add": "Hinzufügen",
|
"add": "Hinzufügen",
|
||||||
|
"content": "Inhalt (Markdown)",
|
||||||
"create": "Neuen Artikel erstellen",
|
"create": "Neuen Artikel erstellen",
|
||||||
"editor": "Editor",
|
"editor": "Editor",
|
||||||
|
"editorGuide": "Verwende die obigen Shortcuts oder schreibe direkt in Markdown. Unterstützt **fett**, *kursiv*, [Links](URL) und mehr.",
|
||||||
"new": "Neuer Artikel",
|
"new": "Neuer Artikel",
|
||||||
"preview": "Vorschau",
|
"preview": "Vorschau",
|
||||||
"titles": "Titel"
|
"shortDesc": "Kurzbeschreibung",
|
||||||
|
"submit": "Absenden",
|
||||||
|
"tagPlaceholder": "Tag hinzufügen…",
|
||||||
|
"titles": "Titel",
|
||||||
|
"uploadCover": "Cover hochladen"
|
||||||
},
|
},
|
||||||
|
"back": "Zurück zu Neuigkeiten",
|
||||||
|
"checkLater": "Schaue später für Updates vorbei.",
|
||||||
"delete": "Artikel löschen",
|
"delete": "Artikel löschen",
|
||||||
"filter": {
|
"filter": {
|
||||||
|
"all": "Gesamt",
|
||||||
"month": "Diesen Monat",
|
"month": "Diesen Monat",
|
||||||
"week": "Diese Woche",
|
"week": "Diese Woche",
|
||||||
"year": "Dieses Jahr"
|
"year": "Dieses Jahr"
|
||||||
@ -351,7 +481,9 @@
|
|||||||
"none": "Keine Artikel",
|
"none": "Keine Artikel",
|
||||||
"notFound": "Artikel nicht gefunden",
|
"notFound": "Artikel nicht gefunden",
|
||||||
"search": "Suche Artikel",
|
"search": "Suche Artikel",
|
||||||
"searchPlaceholder": "Suche Artikel…"
|
"searchPlaceholder": "Suche Artikel…",
|
||||||
|
"subheader": "Bleibe auf dem Laufenden über die neuesten Updates und Ankündigungen.",
|
||||||
|
"title": "Neueste Neuigkeiten"
|
||||||
},
|
},
|
||||||
"options": "Einstellungen",
|
"options": "Einstellungen",
|
||||||
"security": "Sicherheit",
|
"security": "Sicherheit",
|
||||||
@ -359,30 +491,42 @@
|
|||||||
"settings": {
|
"settings": {
|
||||||
"admin": {
|
"admin": {
|
||||||
"description": "Konfiguriere Drop Einstellungen",
|
"description": "Konfiguriere Drop Einstellungen",
|
||||||
|
"store": {
|
||||||
|
"dropGameAltPlaceholder": "Beispiel Spielsymbol",
|
||||||
|
"dropGameDescriptionPlaceholder": "Dies ist ein exemplarisches Spiel. Es wird ersetzt wenn du ein Spiel importierst.",
|
||||||
|
"dropGameNamePlaceholder": "Beispielspiel",
|
||||||
|
"showGamePanelTextDecoration": "Zeige Titel und Beschreibung auf den Spielkacheln (Standard: an)",
|
||||||
|
"title": "Store"
|
||||||
|
},
|
||||||
"title": "Einstellungen"
|
"title": "Einstellungen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"setup": {
|
"setup": {
|
||||||
"auth": {
|
"auth": {
|
||||||
|
"description": "Die Authentifizierung in Drop erfolgt über mehrere konfigurierte ‚Provider‘. Jeder Provider ermöglicht es Nutzern, sich über seine Methode anzumelden. Um zu starten, sollte mindestens ein Authentifizierungs-Provider aktiviert sein und ein Konto über diesen erstellt werden.",
|
||||||
"docs": "Dokumentation {arrow}",
|
"docs": "Dokumentation {arrow}",
|
||||||
"enabled": "Aktiviert?",
|
"enabled": "Aktiviert?",
|
||||||
"openid": {
|
"openid": {
|
||||||
"description": "OpenID Connect (OIDC) ist eine oft unterstützte OAuth2 Erweiterung. Drop erfordert die Konfiguration von OIDC über Umgebungsvariablen.",
|
"description": "OpenID Connect (OIDC) ist eine oft unterstützte OAuth2 Erweiterung. Drop erfordert die Konfiguration von OIDC über Umgebungsvariablen.",
|
||||||
|
"skip": "Ich habe ein OIDC Nutzer",
|
||||||
"title": "OpenID Connect"
|
"title": "OpenID Connect"
|
||||||
},
|
},
|
||||||
"simple": {
|
"simple": {
|
||||||
"description": "Die einfache Authentifizierung verwendet Nutzername und Password zur Authentifizierung von Benutzern. Sie ist standartmäßig aktiviert, wenn kein anderer Authentifizierungsanbieter aktiviert ist.",
|
"description": "Die einfache Authentifizierung verwendet Nutzername und Password zur Authentifizierung von Benutzern. Sie ist standartmäßig aktiviert, wenn kein anderer Authentifizierungsanbieter aktiviert ist.",
|
||||||
|
"register": "Als Admin registrieren {arrow}",
|
||||||
"title": "Einfache Authentifizierung"
|
"title": "Einfache Authentifizierung"
|
||||||
},
|
},
|
||||||
"title": "Authentifizierung"
|
"title": "Authentifizierung"
|
||||||
},
|
},
|
||||||
"finish": "Los geht's {arrow}",
|
"finish": "Los geht's {arrow}",
|
||||||
|
"noPage": "keine Seite",
|
||||||
"stages": {
|
"stages": {
|
||||||
"account": {
|
"account": {
|
||||||
"description": "Du benötigst mindestens ein Konto, um Drop zu benutzen.",
|
"description": "Du benötigst mindestens ein Konto, um Drop zu benutzen.",
|
||||||
"name": "Richte dein Administratorkonto ein."
|
"name": "Richte dein Administratorkonto ein."
|
||||||
},
|
},
|
||||||
"library": {
|
"library": {
|
||||||
|
"description": "Füge mindestens eine Bibliotheksquelle hinzu, um Drop zu nutzen.",
|
||||||
"name": "Erstelle eine Bibliothek."
|
"name": "Erstelle eine Bibliothek."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -391,79 +535,127 @@
|
|||||||
},
|
},
|
||||||
"store": {
|
"store": {
|
||||||
"about": "Über",
|
"about": "Über",
|
||||||
|
"commingSoon": "Demnächst verfügbar",
|
||||||
"developers": "Entwickler | Entwickler | Entwickler",
|
"developers": "Entwickler | Entwickler | Entwickler",
|
||||||
"exploreMore": "Mehr entdecken {arrow}",
|
"exploreMore": "Mehr entdecken {arrow}",
|
||||||
"featured": "Empfohlen",
|
"featured": "Empfohlen",
|
||||||
|
"images": "Spielbilder",
|
||||||
|
"lookAt": "Schau es dir an",
|
||||||
"noDevelopers": "Keine Entwickler",
|
"noDevelopers": "Keine Entwickler",
|
||||||
"noGame": "Kein Spiel",
|
"noFeatured": "KEINE HERVORGEHOBENEN SPIELE",
|
||||||
|
"noGame": "KEIN SPIEL",
|
||||||
"noImages": "Keine Bilder",
|
"noImages": "Keine Bilder",
|
||||||
|
"noPublishers": "Kein Publisher.",
|
||||||
|
"noTags": "Keine Tags",
|
||||||
|
"openAdminDashboard": "Im Admin Dashboard öffnen",
|
||||||
|
"openFeatured": "Spiele in der Admin-Bibliothek markieren {arrow}",
|
||||||
"platform": "Plattform | Plattform | Plattform",
|
"platform": "Plattform | Plattform | Plattform",
|
||||||
|
"publishers": "Publisher | Publisher | Publisher",
|
||||||
"rating": "Bewertung",
|
"rating": "Bewertung",
|
||||||
|
"readLess": "Weniger anzeigen",
|
||||||
|
"readMore": "Mehr anzeigen",
|
||||||
"recentlyAdded": "Kürzlich hinzugefügt",
|
"recentlyAdded": "Kürzlich hinzugefügt",
|
||||||
"recentlyReleased": "Kürzlich veröffentlicht",
|
"recentlyReleased": "Kürzlich veröffentlicht",
|
||||||
"recentlyUpdated": "Kürzlich aktualisiert",
|
"recentlyUpdated": "Kürzlich aktualisiert",
|
||||||
"released": "Veröffentlicht",
|
"released": "Veröffentlicht",
|
||||||
"reviews": "({0} Bewertungen)",
|
"reviews": "({0} Bewertungen)",
|
||||||
|
"tags": "Tags",
|
||||||
|
"title": "Store",
|
||||||
"view": {
|
"view": {
|
||||||
"sort": "Sortieren",
|
"sort": "Sortieren",
|
||||||
"srFilters": "Filter",
|
"srFilters": "Filter",
|
||||||
"srGames": "Spiele"
|
"srGames": "Spiele",
|
||||||
|
"srViewGrid": "Raster anzeigen"
|
||||||
},
|
},
|
||||||
|
"viewInStore": "Im Store ansehen",
|
||||||
"website": "Webseite"
|
"website": "Webseite"
|
||||||
},
|
},
|
||||||
"tasks": {
|
"tasks": {
|
||||||
"admin": {
|
"admin": {
|
||||||
|
"back": "{arrow} Zurück zu den Aufgaben",
|
||||||
|
"completedTasksTitle": "Abgeschlossene Aufgaben",
|
||||||
|
"dailyScheduledTitle": "Tägliche Aufgaben",
|
||||||
|
"execute": "{arrow} Ausführen",
|
||||||
|
"noTasksRunning": "Keine laufenden Aufgaben",
|
||||||
|
"progress": "{0}%",
|
||||||
|
"runningTasksTitle": "Laufende Aufgaben",
|
||||||
"scheduled": {
|
"scheduled": {
|
||||||
|
"checkUpdateDescription": "Drop auf Updates überprüfen.",
|
||||||
|
"checkUpdateName": "Auf Updates prüfen.",
|
||||||
|
"cleanupInvitationsDescription": "Bereinigt abgelaufene Einladungen aus der Datenbank, um Speicherplatz zu sparen.",
|
||||||
"cleanupInvitationsName": "Einladungen bereinigen",
|
"cleanupInvitationsName": "Einladungen bereinigen",
|
||||||
|
"cleanupObjectsDescription": "Erkennt und löscht nicht referenzierte und ungenutzte Objekte, um Speicherplatz zu sparen.",
|
||||||
|
"cleanupObjectsName": "Objekte bereinigen",
|
||||||
|
"cleanupSessionsDescription": "Bereinigt abgelaufene Sitzungen, um Speicherplatz zu sparen und die Sicherheit zu gewährleisten.",
|
||||||
"cleanupSessionsName": "Sitzungen bereinigen."
|
"cleanupSessionsName": "Sitzungen bereinigen."
|
||||||
}
|
},
|
||||||
|
"viewTask": "Ansehen {arrow}",
|
||||||
|
"weeklyScheduledTitle": "Wöchentliche Aufgaben"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"title": "Drop",
|
"title": "Drop",
|
||||||
"titleTemplate": "{0} - Drop",
|
"titleTemplate": "{0} - Drop",
|
||||||
|
"todo": "Todo",
|
||||||
|
"type": "Typ",
|
||||||
"upload": "Hochladen",
|
"upload": "Hochladen",
|
||||||
"uploadFile": "Datei hochladen",
|
"uploadFile": "Datei hochladen",
|
||||||
"userHeader": {
|
"userHeader": {
|
||||||
"closeSidebar": "Seitenleiste schließen",
|
"closeSidebar": "Seitenleiste schließen",
|
||||||
"links": {
|
"links": {
|
||||||
"library": "Bibliothek"
|
"community": "Community",
|
||||||
|
"library": "Bibliothek",
|
||||||
|
"news": "Neuigkeiten"
|
||||||
},
|
},
|
||||||
"profile": {
|
"profile": {
|
||||||
|
"admin": "Admin Dashboard",
|
||||||
"settings": "Kontoeinstellungen"
|
"settings": "Kontoeinstellungen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"users": {
|
"users": {
|
||||||
"admin": {
|
"admin": {
|
||||||
"adminHeader": "Administrator?",
|
"adminHeader": "Administrator?",
|
||||||
|
"adminUserLabel": "Admin",
|
||||||
"authLink": "Authentifizierung {arrow}",
|
"authLink": "Authentifizierung {arrow}",
|
||||||
"authentication": {
|
"authentication": {
|
||||||
"configure": "Konfigurieren",
|
"configure": "Konfigurieren",
|
||||||
|
"description": "Drop unterstützt eine Vielzahl von Authentifizierungsmechanismen. Wenn du sie aktivierst oder deaktivierst, werden sie auf dem Anmeldebildschirm angezeigt, damit Benutzer sie auswählen können. Klicke auf die Drei-Punkte, um den Authentifizierungsmechanismus zu konfigurieren.",
|
||||||
"disabled": "Deaktiviert",
|
"disabled": "Deaktiviert",
|
||||||
"enabled": "Aktiviert",
|
"enabled": "Aktiviert",
|
||||||
"enabledKey": "Aktiviert?",
|
"enabledKey": "Aktiviert?",
|
||||||
"oidc": "OpenID Connect",
|
"oidc": "OpenID Connect",
|
||||||
|
"simple": "Einfach (Nutzername/Passwort)",
|
||||||
"srOpenOptions": "Einstellungen öffnen",
|
"srOpenOptions": "Einstellungen öffnen",
|
||||||
"title": "Authentifizierung"
|
"title": "Authentifizierung"
|
||||||
},
|
},
|
||||||
"authoptionsHeader": "Authentifizierungseinstellungen",
|
"authoptionsHeader": "Authentifizierungseinstellungen",
|
||||||
"delete": "Löschen",
|
"delete": "Löschen",
|
||||||
"deleteUser": "Benutzer löschen {0}",
|
"deleteUser": "Benutzer löschen {0}",
|
||||||
|
"description": "Verwalte Benutzer auf deiner Drop-Instanz und konfiguriere deine Authentifizierungsmethode.",
|
||||||
"displayNameHeader": "Anzeigename",
|
"displayNameHeader": "Anzeigename",
|
||||||
"emailHeader": "E-Mail",
|
"emailHeader": "E-Mail",
|
||||||
"normalUserLabel": "Normaler Benutzer",
|
"normalUserLabel": "Normaler Benutzer",
|
||||||
"simple": {
|
"simple": {
|
||||||
|
"adminInvitation": "Admin Einladung",
|
||||||
"createInvitation": "Einladung erstellen",
|
"createInvitation": "Einladung erstellen",
|
||||||
|
"description": "Die einfache Authentifizierung verwendet ein Einladungssystem zur Erstellung von Benutzern. Du kannst eine Einladung erstellen und optional einen Benutzernamen oder eine E-Mail-Adresse für den Benutzer angeben. Daraufhin wird eine magische URL generiert, mit der ein Konto erstellt werden kann.",
|
||||||
|
"expires": "Läuft ab: {expiry}",
|
||||||
"invitationTitle": "Einladungen",
|
"invitationTitle": "Einladungen",
|
||||||
"invite3Days": "3 Tage",
|
"invite3Days": "3 Tage",
|
||||||
"invite6Months": "6 Monate",
|
"invite6Months": "6 Monate",
|
||||||
"inviteAdminSwitchDescription": "Erstelle diesen Benutzer als Administrator",
|
"inviteAdminSwitchDescription": "Erstelle diesen Benutzer als Administrator",
|
||||||
|
"inviteAdminSwitchLabel": "Admin Einladung",
|
||||||
"inviteButton": "Einladung",
|
"inviteButton": "Einladung",
|
||||||
|
"inviteDescription": "Drop erstellt eine URL, die du an die Person senden kannst, die du einladen möchtest. Du kannst optional einen Benutzernamen oder eine E-Mail-Adresse angeben, die sie verwenden soll.",
|
||||||
|
"inviteEmailDescription": "Muss im Format nutzer{'@'}beispiel.de sein",
|
||||||
"inviteEmailLabel": "E-Mail-Adresse (optional)",
|
"inviteEmailLabel": "E-Mail-Adresse (optional)",
|
||||||
|
"inviteEmailPlaceholder": "ich{'@'}beispiel.de",
|
||||||
|
"inviteExpiryLabel": "Läuft ab",
|
||||||
"inviteMonth": "1 Monat",
|
"inviteMonth": "1 Monat",
|
||||||
"inviteNever": "Niemals",
|
"inviteNever": "Niemals",
|
||||||
"inviteTitle": "Ein Benutzer zu Drop einladen",
|
"inviteTitle": "Ein Benutzer zu Drop einladen",
|
||||||
"inviteUsernameFormat": "Muss mindestens 5 Zeichen lang sein",
|
"inviteUsernameFormat": "Muss mindestens 5 Zeichen lang sein",
|
||||||
"inviteUsernameLabel": "Nutzername (optional)",
|
"inviteUsernameLabel": "Nutzername (optional)",
|
||||||
|
"inviteUsernamePlaceholder": "meinNutzername",
|
||||||
"inviteWeek": "1 Woche",
|
"inviteWeek": "1 Woche",
|
||||||
"inviteYear": "1 Jahr",
|
"inviteYear": "1 Jahr",
|
||||||
"neverExpires": "Läuft niemals ab.",
|
"neverExpires": "Läuft niemals ab.",
|
||||||
@ -476,5 +668,6 @@
|
|||||||
"srEditLabel": "Bearbeiten",
|
"srEditLabel": "Bearbeiten",
|
||||||
"usernameHeader": "Nutzername"
|
"usernameHeader": "Nutzername"
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
"welcome": "Deutsche, willkommen!"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,7 +20,27 @@
|
|||||||
"unread": "Notifications Non Lues"
|
"unread": "Notifications Non Lues"
|
||||||
},
|
},
|
||||||
"settings": "Paramètres",
|
"settings": "Paramètres",
|
||||||
"title": "Paramètres du Compte"
|
"title": "Paramètres du Compte",
|
||||||
|
"token": {
|
||||||
|
"acls": "ACLs/scopes",
|
||||||
|
"aclsDesc": "Définir les permissions du Token. Il n'est pas recommandé de sélectionner toutes les ACLs, à moins que ce soit nécessaire.",
|
||||||
|
"expiry": "Expiration",
|
||||||
|
"expiry3Month": "3 mois",
|
||||||
|
"expiry5Year": "5 Années",
|
||||||
|
"expiry6Month": "6 mois",
|
||||||
|
"expiryMonth": "Un mois",
|
||||||
|
"expiryYear": "Une année",
|
||||||
|
"name": "Nom du Token API",
|
||||||
|
"nameDesc": "Le nom du Token, comme référence.",
|
||||||
|
"namePlaceholder": "Mon nouveau Token",
|
||||||
|
"noExpiry": "Pas d'expiration",
|
||||||
|
"noTokens": "Aucun Token connecté à votre compte.",
|
||||||
|
"revoke": "Révoquer",
|
||||||
|
"subheader": "Gérer vos Tokens et leurs permissions associées.",
|
||||||
|
"success": "Token créé avec succès.",
|
||||||
|
"successNote": "Assurez vous de le sauvegarder maintenant, il ne sera plus disponible après.",
|
||||||
|
"title": "API Tokens"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"actions": "Actions",
|
"actions": "Actions",
|
||||||
"add": "Ajouter",
|
"add": "Ajouter",
|
||||||
|
|||||||
@ -5,6 +5,7 @@
|
|||||||
"lastConnected": "Последнее подключение",
|
"lastConnected": "Последнее подключение",
|
||||||
"noDevices": "К вашей учетной записи не подключено ни одного устройства.",
|
"noDevices": "К вашей учетной записи не подключено ни одного устройства.",
|
||||||
"platform": "Платформа",
|
"platform": "Платформа",
|
||||||
|
"revoke": "Аннулировать",
|
||||||
"subheader": "Управляйте устройствами, имеющими доступ к вашей учетной записи Drop.",
|
"subheader": "Управляйте устройствами, имеющими доступ к вашей учетной записи Drop.",
|
||||||
"title": "Устройства"
|
"title": "Устройства"
|
||||||
},
|
},
|
||||||
@ -19,7 +20,27 @@
|
|||||||
"unread": "Непрочитанные уведомления"
|
"unread": "Непрочитанные уведомления"
|
||||||
},
|
},
|
||||||
"settings": "Настройки",
|
"settings": "Настройки",
|
||||||
"title": "Настройки учетной записи"
|
"title": "Настройки учетной записи",
|
||||||
|
"token": {
|
||||||
|
"acls": "Доступ и права",
|
||||||
|
"aclsDesc": "Определяет, какие действия разрешены для этого токена. Не выбирайте все ACL, если это не требуется.",
|
||||||
|
"expiry": "Истечение срока",
|
||||||
|
"expiry3Month": "3 месяца",
|
||||||
|
"expiry5Year": "5 лет",
|
||||||
|
"expiry6Month": "6 месяцев",
|
||||||
|
"expiryMonth": "Месяц",
|
||||||
|
"expiryYear": "Год",
|
||||||
|
"name": "Название API-токена",
|
||||||
|
"nameDesc": "Название токена для справки.",
|
||||||
|
"namePlaceholder": "Мои новые токены",
|
||||||
|
"noExpiry": "Без срока действия",
|
||||||
|
"noTokens": "На вашем аккаунте нет подключённых токенов.",
|
||||||
|
"revoke": "Аннулировать",
|
||||||
|
"subheader": "Управляйте своими API-токенами и их доступом.",
|
||||||
|
"success": "Токен успешно создан.",
|
||||||
|
"successNote": "Скопируйте токен сейчас, позже его не будет видно.",
|
||||||
|
"title": "API-Токены"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"actions": "Действия",
|
"actions": "Действия",
|
||||||
"add": "Добавить",
|
"add": "Добавить",
|
||||||
@ -34,7 +55,50 @@
|
|||||||
"learn": "Узнать больше {arrow}",
|
"learn": "Узнать больше {arrow}",
|
||||||
"paste": "Вставьте этот код в клиент, чтобы продолжить:",
|
"paste": "Вставьте этот код в клиент, чтобы продолжить:",
|
||||||
"permWarning": "Принятие этого запроса позволит \"{name}\" на \"{platform}\" выполнять следующие действия:",
|
"permWarning": "Принятие этого запроса позволит \"{name}\" на \"{platform}\" выполнять следующие действия:",
|
||||||
"requestedAccess": "\"{name}\" запросил доступ к вашей учетной записи Drop."
|
"requestedAccess": "\"{name}\" запросил доступ к вашей учетной записи Drop.",
|
||||||
}
|
"success": "Успешно!"
|
||||||
|
},
|
||||||
|
"email": "Элетронная почка",
|
||||||
|
"password": "Пароль",
|
||||||
|
"register": {
|
||||||
|
"confirmPasswordFormat": "Должно совпадать с выше."
|
||||||
|
},
|
||||||
|
"signin": {
|
||||||
|
"forgot": "Забыли пароль?",
|
||||||
|
"noAccount": "Нет аккаунта? Попросите администратора создать его для вас.",
|
||||||
|
"or": "Или",
|
||||||
|
"signin": "Войти",
|
||||||
|
"title": "Войдите в свой аккаунт"
|
||||||
|
},
|
||||||
|
"signout": "Выход",
|
||||||
|
"username": "Имя пользователя"
|
||||||
|
},
|
||||||
|
"cancel": "Отмена",
|
||||||
|
"common": {
|
||||||
|
"add": "Добавить",
|
||||||
|
"close": "Закрыть",
|
||||||
|
"create": "Создать",
|
||||||
|
"date": "Дата",
|
||||||
|
"deleteConfirm": "Вы точно хотите удалить \"{0}\"?",
|
||||||
|
"edit": "Редактировать",
|
||||||
|
"friends": "Друзья",
|
||||||
|
"groups": "Группы",
|
||||||
|
"name": "Имя",
|
||||||
|
"noResults": "Нет результатов",
|
||||||
|
"noSelected": "Не выбранные предметы.",
|
||||||
|
"remove": "Удалить",
|
||||||
|
"save": "Сохранить",
|
||||||
|
"saved": "Сохранено",
|
||||||
|
"servers": "Сервера",
|
||||||
|
"srLoading": "Загрузка…",
|
||||||
|
"tags": "Теги",
|
||||||
|
"today": "Сегодня"
|
||||||
|
},
|
||||||
|
"delete": "Удалить",
|
||||||
|
"drop": {
|
||||||
|
"drop": "Уронить"
|
||||||
|
},
|
||||||
|
"editor": {
|
||||||
|
"link": "Ссылка"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -74,7 +74,8 @@ export default defineNuxtConfig({
|
|||||||
|
|
||||||
vite: {
|
vite: {
|
||||||
plugins: [
|
plugins: [
|
||||||
tailwindcss(),
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
tailwindcss() as any,
|
||||||
// only used in dev server, not build because nitro sucks
|
// only used in dev server, not build because nitro sucks
|
||||||
// see build hook below
|
// see build hook below
|
||||||
viteStaticCopy({
|
viteStaticCopy({
|
||||||
@ -84,7 +85,8 @@ export default defineNuxtConfig({
|
|||||||
dest: "twemoji",
|
dest: "twemoji",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
}),
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
}) as any,
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@ -14,7 +14,7 @@
|
|||||||
"preview": "nuxt preview",
|
"preview": "nuxt preview",
|
||||||
"postinstall": "nuxt prepare && prisma generate",
|
"postinstall": "nuxt prepare && prisma generate",
|
||||||
"typecheck": "nuxt typecheck",
|
"typecheck": "nuxt typecheck",
|
||||||
"lint": "yarn lint:eslint && yarn lint:prettier",
|
"lint": "pnpm run lint:eslint && pnpm run lint:prettier",
|
||||||
"lint:eslint": "eslint .",
|
"lint:eslint": "eslint .",
|
||||||
"lint:prettier": "prettier . --check",
|
"lint:prettier": "prettier . --check",
|
||||||
"lint:fix": "eslint . --fix && prettier --write --list-different ."
|
"lint:fix": "eslint . --fix && prettier --write --list-different ."
|
||||||
@ -89,5 +89,6 @@
|
|||||||
},
|
},
|
||||||
"prisma": {
|
"prisma": {
|
||||||
"schema": "./prisma"
|
"schema": "./prisma"
|
||||||
}
|
},
|
||||||
|
"packageManager": "pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b"
|
||||||
}
|
}
|
||||||
|
|||||||
12324
pnpm-lock.yaml
generated
Normal file
12324
pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
1
pnpm-workspace.yaml
Normal file
1
pnpm-workspace.yaml
Normal file
@ -0,0 +1 @@
|
|||||||
|
shamefullyHoist: true
|
||||||
@ -9,7 +9,10 @@ const GetChunk = type({
|
|||||||
files: type({
|
files: type({
|
||||||
filename: "string",
|
filename: "string",
|
||||||
chunkIndex: "number",
|
chunkIndex: "number",
|
||||||
}).array(),
|
})
|
||||||
|
.array()
|
||||||
|
.atLeastLength(1)
|
||||||
|
.atMostLength(256),
|
||||||
}).configure(throwingArktype);
|
}).configure(throwingArktype);
|
||||||
|
|
||||||
export default defineEventHandler(async (h3) => {
|
export default defineEventHandler(async (h3) => {
|
||||||
@ -46,21 +49,27 @@ export default defineEventHandler(async (h3) => {
|
|||||||
streamFiles.map((e) => e.end - e.start).join(","),
|
streamFiles.map((e) => e.end - e.start).join(","),
|
||||||
); // Non-standard header, but we're cool like that 😎
|
); // Non-standard header, but we're cool like that 😎
|
||||||
|
|
||||||
for (const file of streamFiles) {
|
const streams = await Promise.all(
|
||||||
const gameReadStream = await libraryManager.readFile(
|
streamFiles.map(async (file) => {
|
||||||
context.libraryId,
|
const gameReadStream = await libraryManager.readFile(
|
||||||
context.libraryPath,
|
context.libraryId,
|
||||||
context.versionName,
|
context.libraryPath,
|
||||||
file.filename,
|
context.versionName,
|
||||||
{ start: file.start, end: file.end },
|
file.filename,
|
||||||
);
|
{ start: file.start, end: file.end },
|
||||||
if (!gameReadStream)
|
);
|
||||||
throw createError({
|
if (!gameReadStream)
|
||||||
statusCode: 500,
|
throw createError({
|
||||||
statusMessage: "Failed to create read stream",
|
statusCode: 500,
|
||||||
});
|
statusMessage: "Failed to create read stream",
|
||||||
|
});
|
||||||
|
return { ...file, stream: gameReadStream };
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
for (const file of streams) {
|
||||||
let length = 0;
|
let length = 0;
|
||||||
await gameReadStream.pipeTo(
|
await file.stream.pipeTo(
|
||||||
new WritableStream({
|
new WritableStream({
|
||||||
write(chunk) {
|
write(chunk) {
|
||||||
h3.node.res.write(chunk);
|
h3.node.res.write(chunk);
|
||||||
|
|||||||
@ -306,7 +306,7 @@ export class MetadataHandler {
|
|||||||
result = await provider.fetchCompany({ query, createObject });
|
result = await provider.fetchCompany({ query, createObject });
|
||||||
if (result === undefined) {
|
if (result === undefined) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`${provider.source()} failed to find a company for "${query}`,
|
`${provider.source()} failed to find a company for "${query}"`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
export default defineEventHandler(async () => {
|
export default defineEventHandler(async () => {
|
||||||
// await new Promise((r) => setTimeout(r, 700));
|
// await new Promise((r) => setTimeout(r, 1400));
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user