diff --git a/static/js/auth.js b/static/js/auth.js index 184f932e..f97d5d4c 100644 --- a/static/js/auth.js +++ b/static/js/auth.js @@ -56,6 +56,15 @@ const LANGUAGE_TEXTS = { modalTitle: 'انتخاب زبان', searchPlaceholder: 'جستجوی زبان...' } + de: { + title: 'Willkommen bei OxiCloud', + subtitle: 'Bitte wählen Sie Ihre Sprache', + continue: 'Fortfahren', + autodetected: 'Wir haben Ihre Sprache automatisch erkannt', + moreLanguages: 'Weitere Sprachen...', + modalTitle: 'Sprache auswählen', + searchPlaceholder: 'Sprache suchen...' + } }; // Complete language registry — add new languages here, they'll appear automatically @@ -1167,4 +1176,4 @@ function logout() { localStorage.removeItem(TOKEN_EXPIRY_KEY); localStorage.removeItem(USER_DATA_KEY); window.location.href = '/login.html'; -} \ No newline at end of file +} diff --git a/static/locales/de.json b/static/locales/de.json new file mode 100644 index 00000000..813692e2 --- /dev/null +++ b/static/locales/de.json @@ -0,0 +1,332 @@ +{ + "app": { + "title": "OxiCloud", + "description": "Minimalistisches System zur Cloud-Datenspeicherung" + }, + "nav": { + "files": "Dateien", + "shared": "Freigegebene Elemente", + "recent": "Zuletzt verwendete Elemente", + "favorites": "Favoriten", + "trash": "Papierkorb" + }, + "actions": { + "search": "Dateien durchsuchen...", + "new_folder": "Neuen Ordner erstellen", + "upload": "Hochladen", + "upload_files": "Dateien hochladen", + "upload_folder": "Ordner hochladen", + "rename": "Umbenennen", + "move": "Verschieben nach...", + "move_to": "Verschieben nach", + "delete": "Löschen", + "download": "Herunterladen", + "view": "Anzeigen", + "cancel": "Abbrechen", + "confirm": "Bestätigen", + "share": "Freigeben", + "favorite": "Zu Favoriten hinzufügen", + "unfavorite": "Aus Favoriten entfernen", + "copy": "Kopieren", + "notify": "Benachrichtigen", + "send": "Senden", + "clear_recent": "Verlauf löschen", + "logout": "Abmelden", + "create": "Erstellen", + "search_btn": "Suchen", + "close": "Schließen", + "delete_permanently": "Endgültig löschen", + "empty_trash": "Papierkorb leeren" + }, + "user_menu": { + "appearance": "Darstellung", + "about": "Über OxiCloud", + "about_description": "Plattform zur Cloud-Datenspeicherung, entwickelt mit Rust und Clean Architecture. Leistungsstark, sicher und datenschutzorientiert." + }, + "share": { + "dialogTitle": "Freigabelink erstellen", + "linkLabel": "Freigabelink:", + "copyLink": "Kopieren", + "permissions": "Berechtigungen:", + "permissionRead": "Leseberechtigung", + "permissionWrite": "Schreibberechtigung", + "permissionReshare": "Weiterfreigabeberechtigung", + "password": "Passwortschutz:", + "generatePassword": "Passwort generieren", + "expiration": "Ablaufdatum:", + "update": "Freigabe aktualisieren", + "remove": "Freigabe entfernen", + "notifyTitle": "Benachrichtigung versenden", + "notifyEmailLabel": "E-Mail-Adresse:", + "notifyMessageLabel": "Nachricht (optional):", + "notifySend": "Benachrichtigung senden", + "shareWithOthers": "Mit weiteren Personen teilen", + "sharePublicly": "Öffentlich freigeben", + "shareSettings": "Freigabeeinstellungen", + "shareCopied": "Der Link wurde in die Zwischenablage kopiert.", + "shareCreated": "Der Freigabelink wurde erfolgreich erstellt.", + "shareUpdated": "Die Freigabeeinstellungen wurden erfolgreich aktualisiert.", + "shareRemoved": "Die Freigabe wurde erfolgreich entfernt." + }, + "share_dialogTitle": "Freigabelink erstellen", + "share_linkLabel": "Freigabelink:", + "share_copyLink": "Kopieren", + "share_permissions": "Berechtigungen:", + "share_permissionRead": "Leseberechtigung", + "share_permissionWrite": "Schreibberechtigung", + "share_permissionReshare": "Weiterfreigabeberechtigung", + "share_password": "Passwortschutz:", + "share_generatePassword": "Passwort generieren", + "share_expiration": "Ablaufdatum:", + "share_update": "Freigabe aktualisieren", + "share_remove": "Freigabe entfernen", + "share_notifyTitle": "Benachrichtigung versenden", + "share_notifyEmailLabel": "E-Mail-Adresse:", + "share_notifyMessageLabel": "Nachricht (optional):", + "share_notifySend": "Benachrichtigung senden", + "shared": { + "backToFiles": "Zurück zur Dateiansicht", + "pageTitle": "Freigegebene Elemente", + "pageDescription": "Verwalten Sie Ihre freigegebenen Dateien und Ordner.", + "filterType": "Typ:", + "filterAll": "Alle", + "filterFiles": "Dateien", + "filterFolders": "Ordner", + "sortBy": "Sortieren nach:", + "sortByName": "Name", + "sortByDate": "Freigabedatum", + "sortByExpiration": "Ablaufdatum", + "search": "Suchen", + "colName": "Name", + "colType": "Typ", + "colDateShared": "Freigabedatum", + "colExpiration": "Ablaufdatum", + "colPermissions": "Berechtigungen", + "colPassword": "Passwortschutz", + "colActions": "Aktionen", + "emptyStateTitle": "Derzeit sind keine freigegebenen Elemente vorhanden.", + "emptyStateDesc": "Freigegebene Dateien und Ordner werden hier angezeigt.", + "goToFiles": "Zur Dateiansicht wechseln", + "typeFile": "Datei", + "typeFolder": "Ordner", + "noExpiration": "Kein Ablaufdatum festgelegt", + "hasPassword": "Ja", + "noPassword": "Nein", + "editShare": "Freigabe bearbeiten", + "notifyShare": "Person benachrichtigen", + "copyLink": "Link kopieren", + "removeShare": "Freigabe entfernen", + "linkCopied": "Der Link wurde in die Zwischenablage kopiert.", + "linkCopyFailed": "Der Link konnte nicht kopiert werden.", + "itemUpdated": "Die Freigabeeinstellungen wurden erfolgreich aktualisiert.", + "itemRemoved": "Die Freigabe wurde erfolgreich entfernt.", + "invalidEmail": "Bitte geben Sie eine gültige E-Mail-Adresse ein.", + "notificationSent": "Die Benachrichtigung wurde erfolgreich versendet.", + "notificationFailed": "Die Benachrichtigung konnte nicht versendet werden.", + "shared_backToFiles": "Zurück zur Dateiansicht", + "shared_pageTitle": "Freigegebene Elemente", + "shared_pageDescription": "Verwalten Sie Ihre freigegebenen Dateien und Ordner.", + "shared_filterType": "Typ:", + "shared_filterAll": "Alle", + "shared_filterFiles": "Dateien", + "shared_filterFolders": "Ordner", + "shared_sortBy": "Sortieren nach:", + "shared_sortByName": "Name", + "shared_sortByDate": "Freigabedatum", + "shared_sortByExpiration": "Ablaufdatum", + "shared_search": "Suchen", + "shared_colName": "Name", + "shared_colType": "Typ", + "shared_colDateShared": "Freigabedatum", + "shared_colExpiration": "Ablaufdatum", + "shared_colPermissions": "Berechtigungen", + "shared_colPassword": "Passwortschutz", + "shared_colActions": "Aktionen", + "shared_emptyStateTitle": "Derzeit sind keine freigegebenen Elemente vorhanden.", + "shared_emptyStateDesc": "Freigegebene Dateien und Ordner werden hier angezeigt.", + "shared_goToFiles": "Zur Dateiansicht wechseln", + "shared_typeFile": "Datei", + "shared_typeFolder": "Ordner", + "shared_noExpiration": "Kein Ablaufdatum festgelegt", + "shared_hasPassword": "Ja", + "shared_noPassword": "Nein", + "shared_editShare": "Freigabe bearbeiten", + "shared_notifyShare": "Person benachrichtigen", + "shared_copyLink": "Link kopieren", + "shared_removeShare": "Freigabe entfernen", + "shared_linkCopied": "Der Link wurde in die Zwischenablage kopiert.", + "shared_linkCopyFailed": "Der Link konnte nicht kopiert werden.", + "shared_itemUpdated": "Die Freigabeeinstellungen wurden erfolgreich aktualisiert.", + "shared_itemRemoved": "Die Freigabe wurde erfolgreich entfernt.", + "shared_invalidEmail": "Bitte geben Sie eine gültige E-Mail-Adresse ein.", + "shared_notificationSent": "Die Benachrichtigung wurde erfolgreich versendet.", + "shared_notificationFailed": "Die Benachrichtigung konnte nicht versendet werden." + }, + "files": { + "name": "Name", + "type": "Typ", + "size": "Größe", + "modified": "Geändert am", + "no_files": "In diesem Ordner sind keine Dateien vorhanden.", + "loading": "Dateien werden geladen …", + "view_grid": "Rasteransicht", + "view_list": "Listenansicht", + "file_types": { + "document": "Dokument", + "image": "Bild", + "video": "Video", + "audio": "Audio", + "pdf": "PDF-Dokument", + "text": "Textdokument", + "folder": "Ordner" + } + }, + "dialogs": { + "rename_folder": "Ordner umbenennen", + "rename_file": "Datei umbenennen", + "new_name": "Neuer Name", + "new_folder_title": "Neuen Ordner erstellen", + "folder_name": "Ordnername", + "folder_placeholder": "Neuer Ordner", + "rename_title": "Umbenennen", + "move_file": "Datei verschieben", + "move_folder": "Ordner verschieben", + "select_destination": "Zielordner auswählen:", + "root": "Hauptverzeichnis", + "delete_confirmation": "Sind Sie sicher, dass Sie dieses Element löschen möchten", + "and_contents": "und alle enthaltenen Elemente", + "no_undo": "Diese Aktion kann nicht rückgängig gemacht werden.", + "confirm_title": "Aktion bestätigen", + "confirm_delete": "In den Papierkorb verschieben", + "confirm_delete_file": "Möchten Sie die Datei \"{{name}}\" in den Papierkorb verschieben?", + "confirm_delete_folder": "Möchten Sie den Ordner \"{{name}}\" und alle enthaltenen Elemente in den Papierkorb verschieben?", + "confirm_permanent_delete": "Endgültig löschen", + "confirm_permanent_delete_msg": "Möchten Sie dieses Element dauerhaft löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "confirm_empty_trash": "Papierkorb leeren", + "confirm_delete_share": "Freigabelink löschen", + "confirm_delete_share_msg": "Möchten Sie diesen Freigabelink löschen?", + "share_file": "Datei freigeben", + "existing_shares": "Bestehende Freigaben", + "share_options": "Freigabeoptionen", + "password": "Passwort", + "expiration": "Ablaufdatum", + "permissions": "Berechtigungen", + "generated_link": "Generierter Link", + "notify": "Benachrichtigung senden", + "recipient": "Empfänger", + "message": "Nachricht" + }, + "dropzone": { + "drag_files": "Ziehen Sie Dateien hierher oder klicken Sie, um Dateien auszuwählen.", + "drop_files": "Legen Sie Dateien hier ab, um den Upload zu starten." + }, + "permissions": { + "read": "Leseberechtigung", + "write": "Schreibberechtigung", + "reshare": "Weiterfreigabeberechtigung" + }, + "errors": { + "file_not_found": "Die Datei wurde nicht gefunden.", + "folder_not_found": "Der Ordner wurde nicht gefunden.", + "delete_error": "Beim Löschen ist ein Fehler aufgetreten.", + "upload_error": "Beim Hochladen ist ein Fehler aufgetreten.", + "rename_error": "Beim Umbenennen ist ein Fehler aufgetreten.", + "move_error": "Beim Verschieben ist ein Fehler aufgetreten.", + "empty_name": "Der Name darf nicht leer sein.", + "name_exists": "Eine Datei oder ein Ordner mit diesem Namen existiert bereits.", + "generic_error": "Es ist ein unerwarteter Fehler aufgetreten." + }, + "breadcrumb": { + "home": "Startseite" + }, + "trash": { + "empty_trash": "Papierkorb leeren", + "empty_state": "Der Papierkorb ist leer.", + "original_location": "Ursprünglicher Speicherort", + "deleted_date": "Löschdatum", + "actions": "Aktionen", + "restore": "Wiederherstellen", + "delete_permanently": "Endgültig löschen", + "empty_confirm": "Sind Sie sicher, dass Sie den Papierkorb leeren möchten? Alle enthaltenen Elemente werden dauerhaft gelöscht." + }, + "auth": { + "login_title": "Anmelden", + "username": "Benutzername", + "username_placeholder": "Bitte geben Sie Ihren Benutzernamen ein", + "password": "Passwort", + "password_placeholder": "Bitte geben Sie Ihr Passwort ein", + "login_button": "Anmelden", + "no_account": "Verfügen Sie noch über kein Konto?", + "register": "Registrieren", + "admin_setup": "Erstmalige Nutzung?", + "setup": "Administrator einrichten", + "register_title": "Konto erstellen", + "email": "E-Mail-Adresse", + "email_placeholder": "Bitte geben Sie Ihre E-Mail-Adresse ein", + "confirm_password": "Passwort bestätigen", + "confirm_password_placeholder": "Bitte bestätigen Sie Ihr Passwort", + "register_button": "Konto erstellen", + "have_account": "Verfügen Sie bereits über ein Konto?", + "login": "Anmelden", + "setup_title": "Ersteinrichtung", + "setup_step1": "Administrator", + "setup_step2": "Systemkonfiguration", + "setup_step3": "Abschluss", + "admin_username": "Administrator-Benutzername", + "admin_email": "Administrator-E-Mail-Adresse", + "admin_password": "Administrator-Passwort", + "create_admin": "Administrator erstellen", + "back_to_login": "System bereits eingerichtet?", + "admin_success": "Das Administrator-Konto wurde erfolgreich erstellt. Sie können sich nun anmelden.", + "account_success": "Das Konto wurde erfolgreich erstellt. Sie können sich nun anmelden.", + "passwords_mismatch": "Die eingegebenen Passwörter stimmen nicht überein.", + "admin_create_error": "Beim Erstellen des Administrator-Kontos ist ein Fehler aufgetreten." + }, + "storage": { + "title": "Speicher", + "calculating": "Speicherplatz wird berechnet...", + "used": "{{percentage}} % verwendet ({{used}} von {{total}})" + }, + "viewer": { + "unsupported_file": "Für diesen Dateityp ist keine Vorschau verfügbar.", + "download_file": "Datei herunterladen", + "zoom_in": "Vergrößern", + "zoom_out": "Verkleinern", + "zoom_reset": "Zoom zurücksetzen" + }, + "language_selector": { + "title": "Willkommen bei OxiCloud", + "subtitle": "Bitte wählen Sie Ihre Sprache", + "continue": "Fortfahren", + "languages": { + "en": "Englisch", + "es": "Spanisch", + "zh": "Chinesisch", + "fa": "Persisch" + } + }, + "favorites": { + "empty_state": "Derzeit sind keine Favoriten vorhanden.", + "empty_hint": "Markieren Sie Dateien oder Ordner, um sie zu Ihren Favoriten hinzuzufügen.", + "add": "Zu Favoriten hinzufügen", + "remove": "Aus Favoriten entfernen" + }, + "recent": { + "title": "Zuletzt verwendete Elemente", + "clear": "Verlauf löschen", + "accessed": "Geöffnet am", + "empty_state": "Keine zuletzt verwendeten Dateien vorhanden.", + "empty_hint": "Geöffnete Dateien werden hier angezeigt." + }, + "notifications": { + "file_renamed": "Datei wurde umbenannt.", + "file_renamed_to": "Die Datei wurde in \"{{name}}\" umbenannt.", + "folder_renamed": "Ordner wurde umbenannt.", + "folder_renamed_to": "Der Ordner wurde in \"{{name}}\" umbenannt.", + "file_uploaded": "Die Datei wurde erfolgreich hochgeladen.", + "file_deleted": "Die Datei wurde in den Papierkorb verschoben.", + "folder_deleted": "Der Ordner wurde in den Papierkorb verschoben.", + "item_deleted_permanently": "Das Element wurde dauerhaft gelöscht.", + "trash_emptied": "Der Papierkorb wurde erfolgreich geleert." + } +} diff --git a/static/sw.js b/static/sw.js index 0be22ed5..8eca6eec 100644 --- a/static/sw.js +++ b/static/sw.js @@ -8,6 +8,7 @@ const ASSETS_TO_CACHE = [ '/locales/en.json', '/locales/es.json', '/locales/fa.json', + '/locales/de.json', '/favicon.ico', 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css', 'https://cdn.jsdelivr.net/npm/alpinejs@3.12.3/dist/cdn.min.js' @@ -95,4 +96,4 @@ self.addEventListener('sync', event => { Promise.resolve() // Placeholder for actual implementation ); } -}); \ No newline at end of file +});