diff --git a/lang/de/app.php b/lang/de/app.php new file mode 100644 index 0000000..6a2ce85 --- /dev/null +++ b/lang/de/app.php @@ -0,0 +1,93 @@ + 'Paketinhalt', + 'bundle-preview-intro' => 'Hier ist eine Liste der herunterladbaren Dateien:', + 'warning-bundle-expiration' => 'Ablaufdatum des Pakets', + 'warning-bundle-expired' => 'Paket ist abgelaufen', + 'download-all' => 'Alle herunterladen', + 'for' => 'für', + 'files' => 'Datei(en)', + 'no-file-in-this-bundle' => 'Keine Datei in diesem Paket', + 'maximum-filesize' => 'Maximale Dateigröße:', + 'preview-link' => 'Vorschaulink', + 'direct-link' => 'Direkter Downloadlink', + 'delete-link' => 'Löschen-Link', + 'upload-files-title' => 'Dateien hochladen', + 'bundle-preview-title' => 'Dateien herunterladen', + 'files-list' => 'Liste der hochgeladenen Dateien', + 'error-title' => 'Es ist ein Fehler aufgetreten', + 'files-count-limit' => 'Maximalanzahl an Dateien erreicht', + 'file-too-big' => 'Diese Datei ist zu groß', + 'cannot-upload' => 'Upload nicht möglich', + 'cannot-upload-blocked-ip' => 'Sie haben keine Berechtigung, Dateien hochzuladen', + 'upload-permission-required' => 'Rechte zum Hochladen erforderlich', + 'cannot-upload-no-password' => 'Sie müssen das korrekte Passwort eingeben, um Dateien hochzuladen', + 'password' => 'Passwort: ', + 'upload-disabled' => 'Upload deaktiviert', + 'start-new-upload' => 'Hier klicken, um einen neuen Upload zu starten', + 'upload-settings' => 'Einstellungen', + 'upload-expiry' => 'Ablaufdatum', + 'upload-title' => 'Titel', + 'upload-description' => 'Beschreibung', + 'required' => 'erforderlich', + 'download-links' => 'Links zum Herunterladen', + 'one-hour' => 'Eine Stunde (1H)', + 'two-hours' => 'Zwei Stunden (2H)', + 'six-hours' => 'Sechs Stunden (6H)', + 'twelve-hours' => 'Zwölf Stunden (12H)', + 'one-day' => 'Ein Tag (1D)', + 'two-days' => 'Zwei Tage (2D)', + 'one-week' => 'Eine Woche (1W)', + 'two-weeks' => 'Zwei Wochen (2W)', + 'one-month' => 'Ein Monat (1M)', + 'three-months' => 'Drei Monate (3M)', + 'six-months' => 'Sechs Monate (6M)', + 'step' => 'Schritt', + 'leave-empty' => 'Leer lassen, um kein Passwort zu setzen', + 'back' => 'Zurück', + 'start-uploading' => 'Upload der Dateien starten', + 'bundle-password' => 'Passwort', + 'complete-upload' => 'Upload abschließen', + 'no-file' => 'Keine Dateien hochgeladen', + 'click-to-remove' => 'Klicken, um Datei zu entfernen', + 'confirm-delete' => 'Wollen Sie diese Datei wirklich löschen?', + 'confirm-complete' => 'Wollen Sie dieses Paket wirklich abschließen? Es wird dann gesperrt und kann nicht mehr modifiziert werden.', + 'confirmation' => 'Bestätigung', + 'cancel' => 'Abbrechen', + 'confirm' => 'Bestätigen', + 'bundle-locked' => 'Dieses Paket ist abgeschlossen und kann nicht mehr modifiziert werden.', + 'created-at' => 'Erstellt', + 'fullsize' => 'Summe', + 'max-downloads' => 'Maximale Anzahl an Downloads', + 'current-downloads' => 'Downloads', + 'create-new-upload' => 'Neues Paket erstellen', + 'page-not-found' => 'Seite nicht gefunden', + 'permission-denied' => 'Berechtigung verweigert', + 'dropzone-text' => 'Dateien hier ablegen oder klicken, um Dateien hochzuladen', + 'server-answered' => 'Server antwortete mit Code {{statusCode}}.', + 'files-count-on-server' => 'Anzahl der hochgeladenen Dateien', + 'files-remaining-files' => 'Verbleibende Anzahl an Dateien', + 'delete-bundle' => 'Paket löschen', + 'confirm-delete-bundle' => 'Wollen Sie dieses Paket wirklich löschen?', + 'bundle-expired' => 'Dieses Paket ist abgelaufen', + 'active' => 'Aktiv', + 'expired' => 'Abgelaufen', + 'existing-bundles' => 'Ihre Pakete', + 'or-create' => 'Neues Paket', + 'no-existing-bundle' => 'Kein Paket vorhanden', + 'authentication' => 'Authentifizierung', + 'login' => 'Nutzername', + 'password' => 'Passwort', + 'do-login' => 'Login', + 'pending' => 'Entwürfe', + 'duplicate-file' => 'Diese Datei ist bereits Teil des Pakets', + 'unexpected-error' => 'Ein unerwarteter Fehler ist aufgetreten', + 'to-get-bundles' => 'um Ihre Pakete zu sehen', + 'you-are-logged-in' => 'Sie sind eingelogged als ":username"', + 'logout' => 'Logout', + 'forever' => 'Für immer', + 'yes' => 'Ja', + 'no' => 'Nein', +]; diff --git a/lang/de/auth.php b/lang/de/auth.php new file mode 100644 index 0000000..99536e1 --- /dev/null +++ b/lang/de/auth.php @@ -0,0 +1,20 @@ + 'Diese Zugangsdaten sind nicht korrekt.', + 'password' => 'Das eingegebene Passwort ist nicht korrekt.', + 'throttle' => 'Zu viele Loginversuche. Bitte versuchen Sie es in :seconds Sekunden erneut.', + +]; diff --git a/lang/de/pagination.php b/lang/de/pagination.php new file mode 100644 index 0000000..ce092b8 --- /dev/null +++ b/lang/de/pagination.php @@ -0,0 +1,19 @@ + '« Vorherige', + 'next' => 'Nächste »', + +]; diff --git a/lang/de/passwords.php b/lang/de/passwords.php new file mode 100644 index 0000000..cfdb4b8 --- /dev/null +++ b/lang/de/passwords.php @@ -0,0 +1,22 @@ + 'Ihr Passwort wurde zurückgesetzt!', + 'sent' => 'Wir haben Ihnen einen Link zum Zurücksetzen des Passworts per E-Mail geschickt!', + 'throttled' => 'Bitte warten Sie, bevor Sie es erneut versuchen.', + 'token' => 'Dieser Token zum Zurücksetzen des Passworts ist ungültig.', + 'user' => "Wir können keinen Benutzer mit dieser E-Mail-Adresse finden.", + +]; diff --git a/lang/de/validation.php b/lang/de/validation.php new file mode 100644 index 0000000..c429315 --- /dev/null +++ b/lang/de/validation.php @@ -0,0 +1,184 @@ + 'Das Feld :attribute muss akzeptiert werden.', + 'accepted_if' => 'Das Feld :attribute muss akzeptiert werden, wenn :other gleich :value ist.', + 'active_url' => 'Das Feld :attribute muss eine gültige URL sein.', + 'after' => 'Das Feld :attribute muss ein Datum nach dem :date sein.', + 'after_or_equal' => 'Das Feld :attribute muss ein Datum nach oder gleich dem :date sein.', + 'alpha' => 'Das Feld :attribute darf nur Buchstaben enthalten.', + 'alpha_dash' => 'Das Feld :attribute darf nur Buchstaben, Zahlen, Striche und Unterstriche enthalten.', + 'alpha_num' => 'Das Feld :attribute darf nur Buchstaben und Zahlen enthalten.', + 'array' => 'Das Feld :attribute muss ein Array sein.', + 'ascii' => 'Das Feld :attribute darf nur einbyte alphanumerische Zeichen und Symbole enthalten.', + 'before' => 'Das Feld :attribute muss ein Datum vor dem :date sein.', + 'before_or_equal' => 'Das Feld :attribute muss ein Datum vor oder gleich dem :date sein.', + 'between' => [ + 'array' => 'Das Feld :attribute muss zwischen :min und :max Elemente haben.', + 'file' => 'Das Feld :attribute muss zwischen :min und :max Kilobytes groß sein.', + 'numeric' => 'Das Feld :attribute muss zwischen :min und :max liegen.', + 'string' => 'Das Feld :attribute muss zwischen :min und :max Zeichen lang sein.', + ], + 'boolean' => 'Das Feld :attribute muss wahr oder falsch sein.', + 'confirmed' => 'Die Bestätigung für das Feld :attribute stimmt nicht überein.', + 'current_password' => 'Das Passwort ist falsch.', + 'date' => 'Das Feld :attribute muss ein gültiges Datum sein.', + 'date_equals' => 'Das Feld :attribute muss ein Datum gleich dem :date sein.', + 'date_format' => 'Das Feld :attribute muss dem Format :format entsprechen.', + 'decimal' => 'Das Feld :attribute muss :decimal Dezimalstellen haben.', + 'declined' => 'Das Feld :attribute muss abgelehnt werden.', + 'declined_if' => 'Das Feld :attribute muss abgelehnt werden, wenn :other gleich :value ist.', + 'different' => 'Das Feld :attribute und :other müssen unterschiedlich sein.', + 'digits' => 'Das Feld :attribute muss :digits Ziffern haben.', + 'digits_between' => 'Das Feld :attribute muss zwischen :min und :max Ziffern haben.', + 'dimensions' => 'Das Feld :attribute hat ungültige Bildabmessungen.', + 'distinct' => 'Das Feld :attribute hat einen doppelten Wert.', + 'doesnt_end_with' => 'Das Feld :attribute darf nicht mit einem der folgenden enden: :values.', + 'doesnt_start_with' => 'Das Feld :attribute darf nicht mit einem der folgenden beginnen: :values.', + 'email' => 'Das Feld :attribute muss eine gültige E-Mail-Adresse sein.', + 'ends_with' => 'Das Feld :attribute muss mit einem der folgenden enden: :values.', + 'enum' => 'Das ausgewählte :attribute ist ungültig.', + 'exists' => 'Das ausgewählte :attribute ist ungültig.', + 'file' => 'Das Feld :attribute muss eine Datei sein.', + 'filled' => 'Das Feld :attribute muss einen Wert haben.', + 'gt' => [ + 'array' => 'Das Feld :attribute muss mehr als :value Elemente haben.', + 'file' => 'Das Feld :attribute muss größer als :value Kilobytes sein.', + 'numeric' => 'Das Feld :attribute muss größer als :value sein.', + 'string' => 'Das Feld :attribute muss mehr als :value Zeichen haben.', + ], + 'gte' => [ + 'array' => 'Das Feld :attribute muss :value oder mehr Elemente haben.', + 'file' => 'Das Feld :attribute muss gleich oder größer als :value Kilobytes sein.', + 'numeric' => 'Das Feld :attribute muss gleich oder größer als :value sein.', + 'string' => 'Das Feld :attribute muss gleich oder mehr als :value Zeichen haben.', + ], + 'image' => 'Das Feld :attribute muss ein Bild sein.', + 'in' => 'Das ausgewählte :attribute ist ungültig.', + 'in_array' => 'Das Feld :attribute muss in :other vorhanden sein.', + 'integer' => 'Das Feld :attribute muss eine Ganzzahl sein.', + 'ip' => 'Das Feld :attribute muss eine gültige IP-Adresse sein.', + 'ipv4' => 'Das Feld :attribute muss eine gültige IPv4-Adresse sein.', + 'ipv6' => 'Das Feld :attribute muss eine gültige IPv6-Adresse sein.', + 'json' => 'Das Feld :attribute muss ein gültiger JSON-String sein.', + 'lowercase' => 'Das Feld :attribute muss in Kleinbuchstaben sein.', + 'lt' => [ + 'array' => 'Das Feld :attribute muss weniger als :value Elemente haben.', + 'file' => 'Das Feld :attribute muss kleiner als :value Kilobytes sein.', + 'numeric' => 'Das Feld :attribute muss kleiner als :value sein.', + 'string' => 'Das Feld :attribute muss weniger als :value Zeichen haben.', + ], + 'lte' => [ + 'array' => 'Das Feld :attribute darf nicht mehr als :value Elemente haben.', + 'file' => 'Das Feld :attribute muss kleiner oder gleich :value Kilobyte sein.', + 'numeric' => 'Das Feld :attribute muss kleiner oder gleich :value sein.', + 'string' => 'Das Feld :attribute muss kleiner oder gleich :value Zeichen sein.', + ], + 'mac_address' => 'Das Feld :attribute muss eine gültige MAC-Adresse sein.', + 'max' => [ + 'array' => 'Das Feld :attribute darf nicht mehr als :max Elemente haben.', + 'file' => 'Das Feld :attribute darf nicht größer als :max Kilobyte sein.', + 'numeric' => 'Das Feld :attribute darf nicht größer als :max sein.', + 'string' => 'Das Feld :attribute darf nicht mehr als :max Zeichen haben.', + ], + 'max_digits' => 'Das Feld :attribute darf nicht mehr als :max Ziffern haben.', + 'mimes' => 'Das Feld :attribute muss eine Datei vom Typ: :values sein.', + 'mimetypes' => 'Das Feld :attribute muss eine Datei vom Typ: :values sein.', + 'min' => [ + 'array' => 'Das Feld :attribute muss mindestens :min Elemente haben.', + 'file' => 'Das Feld :attribute muss mindestens :min Kilobyte sein.', + 'numeric' => 'Das Feld :attribute muss mindestens :min sein.', + 'string' => 'Das Feld :attribute muss mindestens :min Zeichen haben.', + ], + 'min_digits' => 'Das Feld :attribute muss mindestens :min Ziffern haben.', + 'missing' => 'Das Feld :attribute muss fehlen.', + 'missing_if' => 'Das Feld :attribute muss fehlen, wenn :other :value ist.', + 'missing_unless' => 'Das Feld :attribute muss fehlen, es sei denn, :other ist :value.', + 'missing_with' => 'Das Feld :attribute muss fehlen, wenn :values vorhanden ist.', + 'missing_with_all' => 'Das Feld :attribute muss fehlen, wenn :values vorhanden sind.', + 'multiple_of' => 'Das Feld :attribute muss ein Vielfaches von :value sein.', + 'not_in' => 'Das ausgewählte :attribute ist ungültig.', + 'not_regex' => 'Das Format des Feldes :attribute ist ungültig.', + 'numeric' => 'Das Feld :attribute muss eine Zahl sein.', + 'password' => [ + 'letters' => 'Das Feld :attribute muss mindestens einen Buchstaben enthalten.', + 'mixed' => 'Das Feld :attribute muss mindestens einen Groß- und einen Kleinbuchstaben enthalten.', + 'numbers' => 'Das Feld :attribute muss mindestens eine Zahl enthalten.', + 'symbols' => 'Das Feld :attribute muss mindestens ein Symbol enthalten.', + 'uncompromised' => 'Das angegebene :attribute ist in einem Datenleck aufgetaucht. Bitte wählen Sie ein anderes :attribute.', + ], + 'present' => 'Das Feld :attribute muss vorhanden sein.', + 'prohibited' => 'Das Feld :attribute ist verboten.', + 'prohibited_if' => 'Das Feld :attribute ist verboten, wenn :other :value ist.', + 'prohibited_unless' => 'Das Feld :attribute ist verboten, es sei denn :other befindet sich in :values.', + 'prohibits' => 'Das Feld :attribute verbietet das Vorhandensein von :other.', + 'regex' => 'Das Format des Feldes :attribute ist ungültig.', + 'required' => 'Das Feld :attribute ist erforderlich.', + 'required_array_keys' => 'Das Feld :attribute muss Einträge für: :values enthalten.', + 'required_if' => 'Das Feld :attribute ist erforderlich, wenn :other :value ist.', + 'required_if_accepted' => 'Das Feld :attribute ist erforderlich, wenn :other akzeptiert ist.', + 'required_unless' => 'Das Feld :attribute ist erforderlich, es sei denn :other befindet sich in :values.', + 'required_with' => 'Das Feld :attribute ist erforderlich, wenn :values vorhanden ist.', + 'required_with_all' => 'Das Feld :attribute ist erforderlich, wenn :values vorhanden sind.', + 'required_without' => 'Das Feld :attribute ist erforderlich, wenn :values nicht vorhanden ist.', + 'required_without_all' => 'Das Feld :attribute ist erforderlich, wenn keines von :values vorhanden ist.', + 'same' => 'Das Feld :attribute muss mit :other übereinstimmen.', + 'size' => [ + 'array' => 'Das Feld :attribute muss :size Elemente enthalten.', + 'file' => 'Das Feld :attribute muss :size Kilobyte sein.', + 'numeric' => 'Das Feld :attribute muss :size sein.', + 'string' => 'Das Feld :attribute muss :size Zeichen sein.', + ], + 'starts_with' => 'Das Feld :attribute muss mit einem der folgenden beginnen: :values.', + 'string' => 'Das Feld :attribute muss ein String sein.', + 'timezone' => 'Das Feld :attribute muss eine gültige Zeitzone sein.', + 'unique' => 'Das :attribute wurde bereits vergeben.', + 'uploaded' => 'Das Hochladen von :attribute ist fehlgeschlagen.', + 'uppercase' => 'Das Feld :attribute muss in Großbuchstaben sein.', + 'url' => 'Das Feld :attribute muss eine gültige URL sein.', + 'ulid' => 'Das Feld :attribute muss eine gültige ULID sein.', + 'uuid' => 'Das Feld :attribute muss eine gültige UUID sein.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/en/app.php b/lang/en/app.php index b92e362..b448d6b 100644 --- a/lang/en/app.php +++ b/lang/en/app.php @@ -84,7 +84,7 @@ return [ 'pending' => 'Drafts', 'duplicate-file' => 'This file already exists in the bundle', 'unexpected-error' => 'An unexpected error has occurred', - 'login-to-get-bundles' => 'to get your bundles', + 'to-get-bundles' => 'to get your bundles', 'you-are-logged-in' => 'You are logged in as ":username"', 'logout' => 'Logout', 'forever' => 'Forever', diff --git a/lang/kr/app.php b/lang/kr/app.php index e50cbbc..4911e4a 100644 --- a/lang/kr/app.php +++ b/lang/kr/app.php @@ -84,7 +84,7 @@ return [ 'pending' => 'Drafts', 'duplicate-file' => '이 파일이 번들에 이미 있습니다', 'unexpected-error' => '예기치 않은 오류가 발생했습니다', - 'login-to-get-bundles' => 'to get your bundles', + 'to-get-bundles' => 'to get your bundles', 'you-are-logged-in' => '"username"로 로그인 했습니다', 'logout' => '로그아웃', 'forever' => '로그인 기억', diff --git a/readme.md b/readme.md index a005fdd..781a02d 100644 --- a/readme.md +++ b/readme.md @@ -7,7 +7,7 @@ ## Description -This PHP application based on Laravel 10.9 allows to share files like Wetransfer. You may install it **on your own server**. It **does not require** any database system, it works with JSON files into the storage folder. It is **multilingual** and comes with english, french and korean translations for now. You're welcome to help translating the app. +This PHP application based on Laravel 10.9 allows to share files like Wetransfer. You may install it **on your own server**. It **does not require** any database system, it works with JSON files into the storage folder. It is **multilingual** and comes with english, french, german and korean translations for now. You're welcome to help translating the app. This application provides two links per bundle : - a bundle preview link : you can send this link to your recipients who will see the bundle content. For example: http://yourdomain/bundle/dda2d646b6746b96ea9b?auth=965242. The recipient can see all the files of the bundle and download the bundle as a ZIP archive. @@ -28,7 +28,7 @@ The application also comes with a Laravel Artisan command as a background task w - ability to download the entire bundle as ZIP archive (password protected when applicable) - direct download link (doesn't preview the bundle content) - garbage collector which removes the expired bundles as a background task -- multilingual (EN and FR) +- multilingual (EN, FR, DE and KR) - easy installation, **no database required** - secured by tokens, authentication codes and non-publicly-accessible files @@ -108,6 +108,8 @@ server { location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Scheme $scheme; proxy_pass http://localhost:8080; } @@ -171,7 +173,7 @@ In order to configure your application, copy the .env.example file into .env. Th | `APP_ENV`     | change this to `production` when in production (`local` otherwise) | | `APP_DEBUG` | change this to `false` when in production (`true` otherwise) | | `APP_TIMEZONE` | change this to your current timezone | -| `APP_LOCALE` | change this to "fr", "en" or "kr" | +| `APP_LOCALE` | change this to "fr", "en", "de" or "kr" | | `UPLOAD_PREVENT_DUPLICATES` | Should the app block duplicate files (true / false) | | `HASH_MAX_FILESIZE`| max size for hashing file to check for duplicate files. If files are bigger than limit, they will not be hashed. Find the best value for better cpu / memory consumption | | `UPLOAD_MAX_FILES` | (*optional*) maximal number of files per bundle |