initial
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
{
|
||||
"nav": {
|
||||
"chats": "Chats",
|
||||
"friends": "Freunde",
|
||||
"settings": "Einstellungen",
|
||||
"admin": "Admin"
|
||||
},
|
||||
"sidebar": {
|
||||
"search_placeholder": "Suchen…",
|
||||
"new_chat": "Neuer Chat",
|
||||
"sign_out": "Abmelden"
|
||||
},
|
||||
"presence": {
|
||||
"online": "Online",
|
||||
"idle": "Abwesend",
|
||||
"dnd": "Nicht stören",
|
||||
"invisible": "Unsichtbar",
|
||||
"offline": "Offline"
|
||||
},
|
||||
"chats": {
|
||||
"empty_title": "Noch keine Unterhaltungen",
|
||||
"empty_subtitle": "Starte einen Chat über den Freunde-Tab.",
|
||||
"select_prompt": "Unterhaltung auswählen",
|
||||
"select_subtitle": "Wähle einen Chat aus der Liste oder starte einen neuen.",
|
||||
"deleted": "(gelöscht)",
|
||||
"edited": "bearbeitet",
|
||||
"seen": "Gelesen",
|
||||
"typing_one": "{{name}} schreibt…",
|
||||
"typing_many": "{{count}} schreiben…",
|
||||
"new_chat": "Neuer Chat",
|
||||
"new_group": "Neue Gruppe",
|
||||
"call_outgoing": "Ausgehender Anruf",
|
||||
"call_incoming": "Eingehender Anruf",
|
||||
"call_missed": "Verpasster Anruf",
|
||||
"call_no_answer": "Keine Antwort",
|
||||
"call_declined": "Anruf abgelehnt"
|
||||
},
|
||||
"call": {
|
||||
"start_audio": "Sprachanruf",
|
||||
"incoming_title": "Eingehender Anruf",
|
||||
"incoming_from": "{{name}} ruft an",
|
||||
"incoming_group_from": "{{name}} ruft die Gruppe",
|
||||
"outgoing_ringing": "Klingelt…",
|
||||
"connecting": "Verbinde…",
|
||||
"connected": "Im Gespräch",
|
||||
"accept": "Annehmen",
|
||||
"decline": "Ablehnen",
|
||||
"hangup": "Auflegen",
|
||||
"mute": "Stumm",
|
||||
"unmute": "Laut",
|
||||
"busy": "Besetzt — bereits im Gespräch",
|
||||
"active_in_conv": "Laufender Anruf · {{count}} im Raum",
|
||||
"join": "Beitreten",
|
||||
"in_call": "Im Anruf",
|
||||
"waiting_for_peers": "Warte auf andere…",
|
||||
"voice_connected": "Sprachchat verbunden",
|
||||
"still_live": "Anruf läuft noch",
|
||||
"share_screen": "Bildschirm teilen",
|
||||
"stop_share_screen": "Screen-Share stoppen",
|
||||
"is_sharing_screen": "{{name}} teilt den Bildschirm",
|
||||
"watch_screen": "Bildschirm anschauen",
|
||||
"stop_watching": "Nicht mehr anschauen",
|
||||
"fullscreen": "Vollbild",
|
||||
"e2ee_active_hint": "Audio + Video sind Ende-zu-Ende-verschlüsselt"
|
||||
},
|
||||
"group": {
|
||||
"create_title": "Neue Gruppe",
|
||||
"create_name_label": "Gruppenname",
|
||||
"create_name_placeholder": "Team-Chat",
|
||||
"create_members_label": "Freunde hinzufügen",
|
||||
"create_members_empty": "Noch keine Freunde — erst welche hinzufügen.",
|
||||
"create_cta": "Gruppe erstellen",
|
||||
"create_cta_loading": "Erstelle…",
|
||||
"info_title": "Gruppen-Info",
|
||||
"info_members": "Mitglieder",
|
||||
"info_role_admin": "Admin",
|
||||
"info_role_mod": "Mod",
|
||||
"info_role_member": "Mitglied",
|
||||
"info_add_title": "Mitglieder hinzufügen",
|
||||
"info_add_empty": "Alle deine Freunde sind bereits in dieser Gruppe.",
|
||||
"info_add_help": "Klick auf einen Freund um ihn direkt hinzuzufügen.",
|
||||
"info_leave": "Gruppe verlassen",
|
||||
"info_leave_confirm": "Diese Gruppe wirklich verlassen?"
|
||||
},
|
||||
"friends": {
|
||||
"title": "Freunde",
|
||||
"search_placeholder": "Nach Benutzername suchen…",
|
||||
"search_min_chars": "Mindestens 2 Zeichen eingeben.",
|
||||
"search_no_results": "Keine Treffer.",
|
||||
"search_results_title": "Suchergebnisse",
|
||||
"send_request": "Anfrage senden",
|
||||
"request_sent": "Anfrage gesendet",
|
||||
"already_friends": "Bereits befreundet",
|
||||
"incoming_request": "Möchte befreundet sein",
|
||||
"tab_friends": "Freunde",
|
||||
"tab_pending": "Ausstehend",
|
||||
"tab_requests": "Anfragen",
|
||||
"empty_friends": "Noch keine Freunde.",
|
||||
"empty_pending": "Keine ausgehenden Anfragen.",
|
||||
"empty_requests": "Keine eingehenden Anfragen.",
|
||||
"action_message": "Nachricht",
|
||||
"action_unfriend": "Entfernen",
|
||||
"action_accept": "Annehmen",
|
||||
"action_decline": "Ablehnen",
|
||||
"action_cancel": "Abbrechen",
|
||||
"confirm_unfriend": "Diesen Freund entfernen?"
|
||||
},
|
||||
"admin": {
|
||||
"nav": "Admin",
|
||||
"title": "Admin-Panel",
|
||||
"settings_title": "Globale Einstellungen",
|
||||
"invites_enabled": "Neue Registrierungen erlauben",
|
||||
"invites_enabled_hint": "Wenn aus, kann sich niemand neu registrieren — auch nicht mit gültigem Invite.",
|
||||
"invites_title": "Einladungscodes",
|
||||
"invites_create": "Neuer Code",
|
||||
"invites_empty": "Noch keine Codes.",
|
||||
"invites_disable": "Deaktivieren",
|
||||
"invites_enable": "Aktivieren",
|
||||
"invites_delete": "Löschen",
|
||||
"invites_copy": "Kopieren",
|
||||
"invites_copied": "Kopiert",
|
||||
"users_title": "Benutzer",
|
||||
"users_empty": "Noch keine Profile.",
|
||||
"users_flag_admin": "Admin",
|
||||
"users_flag_banned": "Gesperrt",
|
||||
"users_flag_blocked_inviting": "Darf keine Invites erstellen",
|
||||
"invite_col_code": "Code",
|
||||
"invite_col_uses": "Nutzung",
|
||||
"invite_col_expires": "Läuft ab",
|
||||
"invite_col_status": "Status",
|
||||
"invite_col_created": "Erstellt",
|
||||
"invite_status_active": "Aktiv",
|
||||
"invite_status_disabled": "Deaktiviert",
|
||||
"invite_status_expired": "Abgelaufen",
|
||||
"invite_expires_never": "Nie"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Einstellungen",
|
||||
"section_account": "Account",
|
||||
"section_appearance": "Darstellung",
|
||||
"section_privacy": "Privatsphäre",
|
||||
"section_devices": "Geräte",
|
||||
"section_voice": "Sprache",
|
||||
"audio_quality": "Audio-Qualität",
|
||||
"audio_voice": "Sprache (Empfohlen)",
|
||||
"audio_hifi": "HiFi / Musik",
|
||||
"audio_voice_hint": "Mono 48 kbps mit Noise-Suppression, Echo-Cancellation und Auto-Gain. Optimiert für Sprache im Raum.",
|
||||
"audio_hifi_hint": "Stereo 510 kbps Opus ohne DSP — bester Musik/Broadcast-Sound. Erfordert ruhige Umgebung.",
|
||||
"e2ee_calls": "Ende-zu-Ende-Verschlüsselung (Calls)",
|
||||
"e2ee_calls_hint": "Audio + Video werden vor dem Upload verschlüsselt. Der Server sieht nur Ciphertext. Alle Teilnehmer müssen die Option aktiv haben.",
|
||||
"e2ee_calls_unsupported": "Dein Browser unterstützt keine Insertable Streams. E2EE-Calls nicht verfügbar.",
|
||||
"ptt_enabled": "Push-to-Talk",
|
||||
"ptt_enabled_hint": "Mic bleibt stumm, bis die Taste gehalten wird. Overridet den normalen Mute-Button.",
|
||||
"ptt_key": "Hotkey",
|
||||
"ptt_press_key": "Taste drücken…",
|
||||
"section_screen_share": "Bildschirmfreigabe",
|
||||
"screen_share_quality": "Qualität",
|
||||
"screen_share_hint": "WebRTC passt Bitrate + Auflösung dynamisch an die Netzwerkqualität an (SVC/VP9). Die Werte sind Obergrenzen. Änderungen greifen beim nächsten Call.",
|
||||
"language": "Sprache",
|
||||
"presence": "Status",
|
||||
"show_read_receipts": "Lesebestätigungen anzeigen",
|
||||
"show_read_receipts_hint": "Wenn aus, sehen andere nicht wann du ihre Nachrichten gelesen hast — und du siehst nicht wann sie deine gelesen haben.",
|
||||
"allow_dms_strangers": "DMs von Fremden erlauben",
|
||||
"allow_dms_strangers_hint": "Wenn aus, können dich nur Freunde direkt anschreiben.",
|
||||
"this_device": "Dieses Gerät",
|
||||
"danger_zone": "Gefahrenzone",
|
||||
"sign_out": "Abmelden"
|
||||
},
|
||||
"update": {
|
||||
"available": "Update verfügbar",
|
||||
"install": "Installieren & Neustarten",
|
||||
"downloading": "Lade",
|
||||
"installing": "Installiere…"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"brand": {
|
||||
"badge": "Ende-zu-Ende verschlüsselt · nur auf Einladung",
|
||||
"title_line_1": "Private Nachrichten",
|
||||
"title_line_2": "für deinen Kreis.",
|
||||
"subtitle": "Selbst gehostet, Zero-Knowledge-Server, libsodium-Kryptografie. Du und deine Freunde — nichts dazwischen.",
|
||||
"feature_zk_title": "Zero-Knowledge",
|
||||
"feature_zk_desc": "Der Server entschlüsselt niemals deinen Chiffretext.",
|
||||
"feature_selfhost_title": "Self-Hosted",
|
||||
"feature_selfhost_desc": "Dein Supabase. Dein VPS. Deine Schlüssel.",
|
||||
"feature_invite_title": "Nur mit Einladung",
|
||||
"feature_invite_desc": "Keine Suche, keine Fremden. Geschlossener Kreis."
|
||||
},
|
||||
"signup": {
|
||||
"title": "Account erstellen",
|
||||
"subtitle": "Keine Passwörter. Magic Link per E-Mail.",
|
||||
"cta": "Magic Link senden",
|
||||
"cta_sending": "Link wird gesendet…"
|
||||
},
|
||||
"login": {
|
||||
"title": "Willkommen zurück",
|
||||
"subtitle": "E-Mail eingeben — Magic Link folgt.",
|
||||
"cta": "Magic Link senden",
|
||||
"cta_sending": "Link wird gesendet…"
|
||||
},
|
||||
"tab_signup": "Registrieren",
|
||||
"tab_login": "Anmelden",
|
||||
"fields": {
|
||||
"email": "E-Mail",
|
||||
"email_placeholder": "du@beispiel.de",
|
||||
"username": "Benutzername",
|
||||
"username_placeholder": "dennis",
|
||||
"username_hint": "Damit meldest du dich an. Nur Kleinbuchstaben.",
|
||||
"username_invalid": "Kleinbuchstaben a–z, Ziffern, Unterstrich · 3–32 Zeichen.",
|
||||
"invite_code": "Einladungscode",
|
||||
"invite_hint": "Pflichtfeld · Zugang nur auf Einladung."
|
||||
},
|
||||
"sent_banner": "Magic Link an {{email}} gesendet.",
|
||||
"sent_banner_hint": "Dev-Stack: Inbucket öffnen und den 6-stelligen Code aus der Mail kopieren.",
|
||||
"otp_label": "6-stelliger Code",
|
||||
"otp_placeholder": "123456",
|
||||
"otp_hint": "Füge den Code aus der Mail ein.",
|
||||
"otp_cta": "Code prüfen",
|
||||
"otp_cta_loading": "Prüfe…",
|
||||
"otp_back": "Andere E-Mail verwenden",
|
||||
"footer_signup_prompt": "Schon registriert?",
|
||||
"footer_login_prompt": "Neu hier?",
|
||||
"footer_switch_to_login": "Anmelden",
|
||||
"footer_switch_to_signup": "Account erstellen",
|
||||
"footer_studio": "Supabase Studio",
|
||||
"legal_note": "Mit der Registrierung akzeptierst du, dass der Server nur Chiffretext sieht.",
|
||||
"signed_in": {
|
||||
"title": "Angemeldet",
|
||||
"session_active": "Sitzung aktiv",
|
||||
"user_id": "Benutzer-ID",
|
||||
"email": "E-Mail",
|
||||
"username": "Benutzername",
|
||||
"display_name": "Anzeigename",
|
||||
"admin": "Admin",
|
||||
"yes": "Ja",
|
||||
"no": "Nein",
|
||||
"sign_out": "Abmelden",
|
||||
"device_active": "Aktives Gerät",
|
||||
"device_platform": "Plattform",
|
||||
"device_registered_at": "Registriert"
|
||||
},
|
||||
"device": {
|
||||
"title": "Dieses Gerät registrieren",
|
||||
"subtitle": "Erzeugt ein X25519-Schlüsselpaar. Der private Schlüssel bleibt auf diesem Gerät.",
|
||||
"name_label": "Gerätename",
|
||||
"name_hint": "Erscheint in deiner Geräteliste. Wähle einen erkennbaren Namen.",
|
||||
"name_placeholder": "Dennis Laptop",
|
||||
"cta": "Gerät registrieren",
|
||||
"cta_loading": "Schlüsselpaar wird erzeugt…",
|
||||
"security_note_dev": "Dev-Build: Privater Schlüssel liegt unverschlüsselt im localStorage. Stronghold folgt vor dem Release."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"app_name": "ChatApp",
|
||||
"loading": "Lädt…",
|
||||
"finalising_session": "Sitzung wird abgeschlossen…",
|
||||
"cancel": "Abbrechen",
|
||||
"save": "Speichern",
|
||||
"close": "Schließen",
|
||||
"retry": "Wiederholen",
|
||||
"online": "Online",
|
||||
"offline": "Offline",
|
||||
"idle": "Abwesend",
|
||||
"dnd": "Nicht stören",
|
||||
"invisible": "Unsichtbar",
|
||||
"local_stack_online": "Lokaler Stack online",
|
||||
"dev_build": "Dev-Build"
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
"generic": "Etwas ist schiefgelaufen.",
|
||||
"network": "Netzwerkfehler. Prüfe deine Verbindung.",
|
||||
"ERR_NOT_AUTH": "Du bist nicht angemeldet.",
|
||||
"ERR_INVITE_CODE_REQUIRED": "Einladungscode ist erforderlich.",
|
||||
"ERR_USERNAME_INVALID": "Benutzername muss aus Kleinbuchstaben a–z, Ziffern oder Unterstrich bestehen (3–32 Zeichen).",
|
||||
"ERR_INVITES_DISABLED": "Registrierungen sind derzeit vom Admin deaktiviert.",
|
||||
"ERR_INVITE_NOT_FOUND": "Einladungscode nicht gefunden.",
|
||||
"ERR_INVITE_DISABLED": "Diese Einladung wurde deaktiviert.",
|
||||
"ERR_INVITE_EXPIRED": "Diese Einladung ist abgelaufen.",
|
||||
"ERR_INVITE_EXHAUSTED": "Diese Einladung wurde bereits aufgebraucht.",
|
||||
"ERR_DM_SELF": "Du kannst dir keine DM an dich selbst schicken.",
|
||||
"ERR_DM_STRANGERS_DISABLED": "Dieser Benutzer akzeptiert keine DMs von Fremden.",
|
||||
"ERR_NO_PENDING_DM": "Keine offene DM-Anfrage gefunden.",
|
||||
"ERR_GROUP_INVITE_NOT_FOUND": "Gruppeneinladung nicht gefunden.",
|
||||
"ERR_GROUP_INVITE_DISABLED": "Diese Gruppeneinladung wurde deaktiviert.",
|
||||
"ERR_GROUP_INVITE_EXPIRED": "Diese Gruppeneinladung ist abgelaufen.",
|
||||
"ERR_GROUP_INVITE_EXHAUSTED": "Diese Gruppeneinladung wurde bereits aufgebraucht.",
|
||||
"ERR_FRIEND_SELF": "Du kannst dich nicht selbst als Freund hinzufügen.",
|
||||
"ERR_FRIEND_SELF_ACCEPT": "Du kannst deine eigene Freundschaftsanfrage nicht annehmen.",
|
||||
"ERR_FRIEND_BAD_TRANSITION": "Ungültiger Freundschaftsstatus-Wechsel.",
|
||||
"ERR_MESSAGE_DELETED": "Diese Nachricht wurde bereits gelöscht.",
|
||||
"ERR_DELETE_FORBIDDEN": "Du darfst diese Nachricht nicht löschen.",
|
||||
"ERR_EDIT_NOT_SENDER": "Nur der Absender kann diese Nachricht bearbeiten.",
|
||||
"ERR_EDIT_WINDOW_EXPIRED": "Das 24-Stunden-Bearbeitungsfenster ist abgelaufen.",
|
||||
"ERR_ENVELOPE_NOT_SENDER": "Nur der Absender kann die Envelopes neu schreiben.",
|
||||
"ERR_ENVELOPE_WINDOW_EXPIRED": "Das 24-Stunden-Envelope-Bearbeitungsfenster ist abgelaufen."
|
||||
}
|
||||
Reference in New Issue
Block a user