doc: de lang

This commit is contained in:
Tristan Yang
2025-08-07 22:24:58 +08:00
parent 46f8e57e01
commit 880ef4f2cc
18 changed files with 697 additions and 20 deletions
+1 -1
View File
@@ -8,7 +8,7 @@
<style>
body {
width: 100vw;
height: 100vh;
height: 100dvh;
display: flex;
flex-direction: column;
justify-content: center;
+1 -1
View File
@@ -8,7 +8,7 @@
<style>
body {
width: 100vw;
height: 100vh;
height: 100dvh;
display: flex;
flex-direction: column;
justify-content: center;
+1 -1
View File
@@ -110,7 +110,7 @@
background-color: rgba(2, 2, 2, 0.4);
pointer-events: all;
width: 100vw;
height: 100vh;
height: 100dvh;
}
</style>
<style>
+74
View File
@@ -0,0 +1,74 @@
{
"login": {
"title": "Anmelden bei {{name}}",
"google": "Mit Google anmelden",
"github": "Mit GitHub anmelden",
"metamask": "Mit MetaMask anmelden",
"password": "Mit Passwort anmelden",
"oidc": "Mit OIDC anmelden",
"no_account": "Kein Konto?"
},
"reg": {
"title": "Registrieren bei {{name}}",
"google": "Mit Google registrieren",
"github": "Mit GitHub registrieren",
"metamask": "Mit MetaMask registrieren",
"oidc": "Mit OIDC registrieren",
"have_account": "Konto vorhanden?",
"input_name": "Dein Name",
"input_name_tip": "Name oder Pseudonym für andere sichtbar in deinen Spaces."
},
"logout": {
"title": "Abmelden",
"desc": "Wirklich abmelden?",
"clear_local": "Lokale Daten löschen",
"role_changed": "Deine Rolle hat sich geändert. Neu anmelden?",
"later": "Später"
},
"continue": "Mit E-Mail fortfahren",
"placeholder_name": "Deinen Namen eingeben",
"placeholder_email": "Deine E-Mail eingeben",
"placeholder_pwd": "Passwort eingeben",
"placeholder_confirm_pwd": "Passwort bestätigen",
"check_email": "E-Mail prüfen",
"check_email_desc": "Magic Link gesendet an <0>{{email}}</0>. Gültig für 15 Minuten.",
"back_sign_in": "Zurück zur Anmeldung",
"welcome": "Willkommen auf dem Server {{name}}",
"guest_login_tip": "Zum Senden anmelden oder QR-Code scannen",
"enter": "Anmelden bei ",
"sign_in": "Anmelden",
"sign_up": "Registrieren",
"signing_up": "Wird registriert",
"github_login_success": "GitHub-Anmeldung erfolgreich!",
"github_logging_in": "Anmeldung läuft...",
"github_cb_tip": "Schließe dieses Fenster und kehre zum Widget zurück",
"magic_link_expire": {
"title": "Magic Link ungültig/abgelaufen",
"desc": "Bitte neuen Magic Link anfordern.",
"desc_close": "Du kannst dieses Fenster jetzt schließen."
},
"invite_mobile": {
"join": "Tritt unserem Server bei",
"start_download": "Lade die VoceChat-App herunter",
"open": "VoceChat öffnen",
"have_already": "App bereits installiert?"
},
"invite_expire": {
"min30": "30 Minuten",
"h1": "1 Stunde",
"h6": "6 Stunden",
"h12": "12 Stunden",
"d1": "1 Tag",
"d7": "7 Tage",
"d30": "30 Tage"
},
"invite_times": {
"no_limit": "Unbegrenzt",
"time1": "1 Nutzung",
"times5": "5 Nutzungen",
"times10": "10 Nutzungen",
"times25": "25 Nutzungen",
"times50": "50 Nutzungen",
"times100": "100 Nutzungen"
}
}
+73
View File
@@ -0,0 +1,73 @@
{
"pin": "Anheften",
"pin_desc": "Möchtest du diese Nachricht anheften an",
"pinned_msg": "Angeheftete Nachricht",
"pin_empty_tip": "Dieser Kanal hat noch keine angehefteten Nachrichten.",
"fav": "Favorit",
"fav_msg": "Gespeicherte Nachricht",
"fav_empty_tip": "Dieser Kanal hat noch keine gespeicherten Nachrichten.",
"channel_members": "Kanalmitglieder",
"add_channel_members": "Mitglieder hinzufügen",
"welcome_channel": "Willkommen in {{name}}",
"welcome_desc": "Dies ist der Beginn des Kanals #{{name}}.",
"edit_channel": "Kanal bearbeiten",
"channel_name": "Kanalname",
"private_channel": "Privater Kanal",
"create_channel": "Neuen Kanal erstellen",
"create_channel_desc": "Dies ist ein öffentlicher Kanal, alle Teammitglieder können ihn sehen.",
"create_private_channel_desc": "Dies ist ein privater Kanal, nur ausgewählte Mitglieder können beitreten.",
"search_user_placeholder": "Benutzernamen zum Suchen eingeben",
"welcome_msg": "Willkommen im Kanal {{name}}",
"invite_title": "Freunde zu {{name}} einladen",
"invite_by_email": "Per E-Mail einladen",
"enable_smtp": "Zuerst SMTP aktivieren",
"send_invite_link": "Oder Sende Einladungslink an Freunde",
"share_invite_link": "Teile diesen Link, um Personen zu diesem Server einzuladen.",
"invite_link_faq": "Falscher Einladungslink?",
"invite_link_edit": "Einladungslink bearbeiten",
"invite_link_setting_tip": "Einladungslink läuft ab in {{expire}}, maximale Nutzungen: {{times}}",
"generate_new_link": "Neuen Link generieren",
"send_to": "Senden an",
"edited": "bearbeitet",
"license_tip": "Deine Lizenz hat das Limit erreicht, aktualisiere die Lizenz oder kontaktiere den Admin!",
"delete_msg_title": "Nachricht löschen",
"delete_msg_desc": "Bist du sicher, dass du {{msg}} löschen möchtest?",
"delete_msg_this": "diese Nachricht",
"delete_msg_these": "diese Nachrichten",
"new_msg": "{{num}} neue Nachrichten",
"mark_read": "Als gelesen markieren",
"pin_chat": "Chat anheften",
"unpin_chat": "Lösen",
"reply_msg_del": "Diese Nachricht wurde gelöscht.",
"file": "Datei",
"image": "Bild",
"forward": "Weiterleiten",
"voice_message": "Sprachnachricht",
"voice": "Sprachanruf",
"deafen": "Ton deaktivieren",
"undeafen": "Ton aktivieren",
"mute": "Stummschalten",
"unmute": "Stummschaltung aufheben",
"camera_on": "Kamera einschalten",
"camera_off": "Kamera ausschalten",
"leave_voice": "Sprachanruf verlassen",
"add_contact": "Zu Kontakten hinzufügen",
"block": "Blockieren",
"unblock": "Entblockieren",
"contact_tip": "Dieser Benutzer ist nicht in deinen Kontakten",
"contact_block_tip": "Dieser Benutzer wurde von dir blockiert",
"file_expired": "Datei abgelaufen",
"only_owner_can_send": "Nur der Kanalbesitzer kann Nachrichten senden!",
"remark": "Spitzname hinzufügen",
"remark_clear": "Spitzname zurücksetzen",
"remark_intro": "Finde Freunde schneller mit einem persönlichen Spitznamen. Dieser ist nur für dich in deinen Direktnachrichten sichtbar.",
"remark_placeholder": "Spitznamen festlegen"
}
+95
View File
@@ -0,0 +1,95 @@
{
"chat": "Chat",
"members": "Mitglieder",
"favs": "Gespeichert",
"files": "Dateien",
"setting": "Einstellungen",
"more": "Mehr",
"action": {
"login": "Anmelden",
"re_login": "Neu anmelden",
"logout": "Abmelden",
"change_avatar": "Ändern",
"cancel": "Abbrechen",
"dismiss": "Verwerfen",
"search": "Suchen",
"search_user": "Nach Namen suchen",
"new_channel": "Neuer Kanal",
"new_private_channel": "Neuer privater Kanal",
"new_msg": "Neue Nachricht",
"invite_people": "Personen einladen",
"search_people": "Personen suchen",
"create": "Erstellen",
"open": "Öffnen",
"update": "Aktualisieren",
"upload": "Hochladen",
"done": "Fertig",
"add": "Hinzufügen",
"yes": "Ja",
"delete_channel": "Kanal löschen",
"remove": "Entfernen",
"remove_user": "Benutzer entfernen",
"edit": "Bearbeiten",
"edit_msg": "Nachricht bearbeiten",
"add_reaction": "Reaktion hinzufügen",
"add_to_fav": "Zu Favoriten hinzufügen",
"select": "Auswählen",
"forward": "Weiterleiten",
"reply": "Antworten",
"pin": "Anheften",
"unpin": "Lösen",
"send": "Senden",
"send_msg": "Nachricht",
"copy": "Kopieren",
"copy_email": "E-Mail kopieren",
"mute": "Stummschalten",
"unmute": "Stummschaltung aufheben",
"mark_read": "Als gelesen markieren",
"hide_session": "Sitzung ausblenden",
"reload": "Neu laden",
"install": "Installieren",
"download_origin": "Original herunterladen",
"close": "Schließen",
"upgrade": "Upgrade",
"view_pwd": "Passwort anzeigen",
"change_pwd": "Passwort ändern"
},
"status": {
"uploading": "Wird hochgeladen"
},
"tip": {
"email_msg_tip": "E-Mail-Benachrichtigungen sind in deiner Region blockiert. Upgrade auf Pro für diese Funktion.",
"update": "Erfolgreich aktualisiert!",
"delete": "Erfolgreich gelöscht!",
"reg": "Erfolgreich registriert!",
"login": "Anmeldung erfolgreich!",
"logout": "Abmeldung erfolgreich!",
"pin": "Nachricht erfolgreich angeheftet!",
"pwa_install_title": "Web-App auf Desktop installieren?",
"pwa_install_desc": "Zum Desktop hinzufügen für schnellen Zugriff."
},
"new_version": "<0>Neue Version</0> verfügbar",
"mobile_app": "Entdecke unsere <0>Mobile App</0>",
"price": {
"pro": {
"title": "VoceChat Pro",
"desc": "",
"price": "$49"
},
"supreme": {
"title": "VoceChat SDK-Anpassung",
"desc": "",
"price": ""
}
},
"server_update": {
"version_needed": "Diese Funktion benötigt Server-Version: <0>{{version}}</0> 🚨",
"current_version": "Aktuelle Version: <0>{{version}}</0>",
"update_tip": "Bitte Server upgraden!",
"howto": "Anleitung zum Update"
},
"inactive": {
"title": "Nur ein aktiver Tab für VoceChat erlaubt",
"desc": "Lade diese Seite neu oder schließe sie"
}
}
+6
View File
@@ -0,0 +1,6 @@
{
"all_items": "Alle Elemente",
"image": "Bilder",
"video": "Videos",
"audio": "Audios"
}
+6
View File
@@ -0,0 +1,6 @@
{
"from": "Von",
"channel": "Kanal",
"type": "Typ",
"date": "Datum"
}
+39
View File
@@ -0,0 +1,39 @@
{
"username": "Benutzername",
"email": "E-Mail",
"password": "Passwort",
"delete_account": "Konto löschen",
"change_name": "Benutzernamen ändern",
"change_name_desc": "Neuen Benutzernamen eingeben",
"change_email": "E-Mail ändern",
"change_email_desc": "Neue E-Mail eingeben.",
"change_pwd": "Passwort ändern",
"change_pwd_desc": "Aktuelles und neues Passwort eingeben",
"current_pwd": "Aktuelles Passwort",
"new_pwd": "Neues Passwort",
"confirm_new_pwd": "Neues Passwort bestätigen",
"manage_members": "Kontakte verwalten",
"manage_tip": "Deaktivieren ermöglicht späteres Wiederherstellen des Kontos.",
"admin": "Admin",
"user": "Benutzer",
"copy_email": "E-Mail kopieren",
"send_msg": "Nachricht senden",
"call": "Anrufen",
"remove": "Vom Server entfernen",
"remove_from_contact": "Aus Kontakten entfernen",
"remove_account": "Konto entfernen",
"remove_account_desc": "Dieses Konto wirklich entfernen?",
"remove_from_channel": "Aus Kanal entfernen",
"roles": "Rollen",
"set_admin": "Admin",
"set_normal": "Benutzer",
"search_not_found": "Nicht gefunden oder Suchberechtigung fehlt.",
"search_by_id": "Nach ID suchen",
"search_by_id_ph": "Benutzer-ID eingeben",
"search_by_email": "Nach E-Mail suchen",
"search_by_email_ph": "Benutzer-E-Mail eingeben",
"search_by_name": "Nach Namen suchen",
"search_by_name_ph": "Benutzernamen eingeben"
}
+334
View File
@@ -0,0 +1,334 @@
{
"title": "Einstellungen",
"save_change": "Änderungen speichern",
"reset": "Zurücksetzen",
"save_tip": "Du hast ungespeicherte Änderungen!",
"nav": {
"general": "Allgemein",
"overview": "Übersicht",
"members": "Mitglieder",
"data_management": "Datenverwaltung",
"auto_delete_msg": "Nachrichten automatisch löschen",
"user": "Benutzer",
"my_account": "Mein Konto",
"config": "Konfiguration",
"bot": "Bot & Webhook",
"firebase": "Firebase",
"agora": "Agora",
"smtp": "SMTP",
"login_method": "Anmeldemethoden",
"third_app": "Anmeldung über Drittanbieter",
"widget": "Widget",
"license": "Lizenz",
"about": "Über",
"api_doc": "API-Dokumentation",
"version": "Version"
},
"channel": {
"leave": "Kanal verlassen",
"leave_desc": "Bist du sicher, dass du diesen Kanal verlassen möchtest?",
"transfer_desc": "Du musst deine Kanalbesitzerschaft übertragen, bevor du den Kanal verlässt.",
"delete": "Kanal löschen",
"delete_desc": "Bist du sicher, dass du diesen Kanal löschen möchtest?",
"id": "Kanal-ID",
"name": "Kanalname",
"topic": "Kanalthema",
"topic_placeholder": "Informiere alle über die Nutzung dieses Kanals. (Markdown unterstützt)",
"visibility": "Kanalsichtbarkeit",
"public": "Öffentlich",
"private": "Privat",
"enable": "Aktivieren",
"disable": "Deaktivieren",
"allow": "Erlauben",
"disallow": "Verbieten",
"add_friend": "Freund hinzufügen",
"dm_to_member": "DM an Mitglied",
"show_email": "E-Mail anzeigen",
"only_owner": "Nur Besitzer und Admin können Nachrichten senden"
},
"dm": {
"delete": "Benutzer löschen",
"delete_desc": "Bist du sicher, dass du diesen Benutzer löschen möchtest?"
},
"overview": {
"title_feat": "Funktionen",
"name": "Servername",
"desc": "Serverbeschreibung",
"upload_desc": "Mindestgröße 128x128, empfohlene Größe mindestens 512x512. Maximale Größe 5 MB.",
"sign_up": {
"title": "Standardregistrierung",
"desc": "Wer kann sich auf diesem Server registrieren.",
"everyone": "Jeder",
"invite": "Nur mit Einladungslink"
},
"user_msg_notify": {
"title": "Neue Nachrichtenbenachrichtigung per E-Mail",
"desc": "Steuere, ob neue Nachrichten per E-Mail gesendet werden."
},
"server_msg_notify": {
"title": "Neue Nachrichtenbenachrichtigung per E-Mail (Server)",
"desc": "Benutzer können steuern, ob neue Nachrichten per E-Mail gesendet werden. SMTP muss zuerst aktiviert sein.",
"delay_5_min": "Alle 5 Minuten",
"delay_15_min": "Alle 15 Minuten",
"delay_1_hour": "Jede Stunde",
"delay_3_hour": "Alle 3 Stunden",
"delay_12_hour": "Alle 12 Stunden"
},
"admin_create_group": {
"title": "Nur Admins können Gruppen erstellen",
"desc": "Wenn aktiviert, können nur Admins Gruppen erstellen.",
"enable": "Aktivieren",
"disable": "Deaktivieren"
},
"admin_see_group_members": {
"title": "Nur Admins können Gruppenmitglieder sehen",
"desc": "Wenn aktiviert, können nur Admins Gruppenmitglieder sehen.",
"enable": "Aktivieren",
"disable": "Deaktivieren"
},
"admin_only_can_invite": {
"title": "Nur Admins können Benutzer einladen",
"desc": "Wenn aktiviert, können nur Admins neue Mitglieder einladen.",
"enable": "Aktivieren",
"disable": "Deaktivieren"
},
"enable_msg_url_preview": {
"title": "URL-Vorschau in Nachrichten aktivieren",
"desc": "Wenn aktiviert, werden URLs in Nachrichten eine Vorschau anzeigen.",
"enable": "Aktivieren",
"disable": "Deaktivieren"
},
"guest_mode": {
"title": "Gastmodus",
"desc": "Wenn aktiviert, sehen Besucher öffentliche Kanäle auf diesem Server.",
"enable": "Aktivieren",
"disable": "Deaktivieren"
},
"url": {
"title": "Frontend-URL aktualisieren",
"desc": "Frontend-URL aktualisieren"
},
"lang": {
"title": "Sprachen",
"desc": "Systemsprache festlegen"
},
"theme": {
"title": "Design",
"desc": "Wähle dein Design",
"auto": "Automatisch",
"dark": "Dunkel",
"light": "Hell"
},
"message_sound": {
"title": "Nachrichtenton",
"desc": "Ton bei Erhalt neuer Nachrichten abspielen.",
"enable": "Aktivieren",
"disable": "Deaktivieren"
},
"online_status": {
"title": "Online-Status",
"desc": "Wenn aktiviert, sehen Mitglieder den Online/Offline-Status anderer.",
"enable": "Aktivieren",
"disable": "Deaktivieren"
},
"chat_layout": {
"title": "Chat-Layout",
"desc": "Anzeigeseite für deine eigenen Nachrichten",
"left": "Links",
"self_right": "Rechts"
},
"contact_verify": {
"title": "Kontaktüberprüfung",
"desc": "Standardmäßig können sich alle Servermitglieder sehen. Um Kontaktverwaltung zu ermöglichen, aktiviere diese Funktion (Admins sind standardmäßig in der Kontaktliste).",
"enable": "Aktivieren",
"disable": "Deaktivieren"
}
},
"data": {
"clear_files": {
"title": "Datei- und Bilddaten",
"desc": "Klicke unten, um alle Dateien und Bilder dieses Servers zu löschen.",
"btn": "Dateidaten löschen"
},
"clear_msgs": {
"title": "Alle Nachrichtendaten",
"desc": "Klicke unten, um alle Chatdaten (Texte und Dateien) dieses Servers zu löschen.",
"btn": "Chatdaten löschen"
},
"auto_delete_file": {
"title": "Dateien automatisch löschen",
"desc": "Ablaufzeit für Dateien auf diesem Server festlegen.",
"confirm_desc": "Alle Dateien älter als die eingestellte Zeit werden gelöscht.",
"off": "Aus",
"day1": "1 Tag",
"day7": "7 Tage",
"day30": "30 Tage",
"day90": "90 Tage",
"day180": "180 Tage"
}
},
"license": {
"signed": "Signiert",
"domain": "Domänen",
"user_limit": "Benutzerlimit",
"expire": "Läuft ab am",
"create": "Erstellt am",
"value": "Lizenzwert",
"renew": "Lizenz verlängern",
"update": "Manuell aktualisieren",
"update_placeholder": "Neuen Lizenzwert eingeben",
"renew_select": "Preis auswählen",
"tip": {
"title": "Chance auf kostenloses Lizenz-Upgrade!",
"user_test": "Kostenloses Upgrade durch 25-minütigen Benutzertest",
"contact": "Termin buchen: "
},
"payment_success": "Zahlung erfolgreich!",
"back_home": "Zurück zur Startseite",
"tip_renewing": "Lizenz wird verlängert Fenster nicht schließen!",
"tip_renewed": "Lizenz erfolgreich verlängert!",
"tip_renew_error": "Ungültige Stripe-Sitzungs-ID",
"tip_domain": "Die Lizenz ist an eine Domain (ohne Port) gebunden. Bitte bestätigen oder aktualisieren:",
"tip_port": "Domain ohne Port eingeben.",
"tip_confirm": "Zahlung starten"
},
"bot": {
"add_api_key": "API-Schlüssel hinzufügen",
"no_api_key": "Noch kein API-Schlüssel",
"bot_tip_title": "Bots können Nachrichten an Kanäle senden.",
"bot_tip_desc": "Hinweis: API-Schlüssel werden nach Generierung nicht erneut angezeigt. Neue Schlüssel können über „API-Schlüssel hinzufügen“ generiert werden (vorherige Schlüssel bleiben gültig).",
"webhook_tip_title": "Webhooks empfangen Nachrichten aus einem Kanal und benötigen eine von dir bereitgestellte URL.",
"webhook_tip_desc": "Gib eine Webhook-URL an, die 200 zurückgibt.",
"manage": "Verwalten",
"how_to_use": "Anleitung",
"manage_desc": "Bots können jederzeit gelöscht werden. Der Bot-Benutzer wird sofort entfernt und alle APIs ungültig.",
"create_title": "Bot erstellen",
"create_desc": "Benenne deinen Bot. Optional: Webhook-URL für Datenempfang hinzufügen.",
"create_key_title": "Bot-API-Schlüssel erstellen",
"create_key_desc": "API-Schlüssel zur Authentifizierung erstellen",
"create_key_warning": "Kopiere den Schlüssel jetzt! Du wirst ihn später nicht mehr sehen können.",
"key_copy_and_close": "Kopieren und schließen",
"delete_title": "Bot löschen",
"delete_desc": "Bist du sicher, dass du den Bot löschen möchtest?",
"delete_key_title": "Bot-API-Schlüssel löschen",
"delete_key_desc": "Bist du sicher, dass du diesen Schlüssel löschen möchtest?",
"webhook_title": "Webhook-URL aktualisieren",
"webhook_desc": "Gültige URL eingeben",
"col_avatar": "Avatar",
"col_name": "Bot-Name",
"col_api_key": "API-Schlüssel (Eingehend)",
"col_webhook": "Webhook-URL (Ausgehend)",
"col_opt": "Aktionen",
"col_key_name": "Name",
"col_key_value": "Schlüssel",
"col_key_create_time": "Erstellt am",
"col_key_last_used": "Zuletzt verwendet"
},
"auto_delete_msg": {
"title": "Eigene Nachrichten nach Zeitraum löschen",
"desc": "Löscht Nachrichten auf Server- und Client-Seite.",
"off": "Aus",
"5_min": "5 Minuten",
"10_min": "10 Minuten",
"1_hour": "1 Stunde",
"1_day": "1 Tag",
"1_week": "1 Woche",
"clear": "Alle Kanalnachrichten löschen",
"clear_title": "Alle Nachrichten in diesem Kanal löschen.",
"clear_desc": "Löscht alle Nachrichten auf Server- und Client-Seite."
},
"firebase": {
"desc": "Benachrichtigungen erfordern Google Firebase als Standardmethode.",
"sub_desc": "Offizielle Konfiguration bereitgestellt. Stelle sicher, dass FCM von deinem Server/ Gerät erreichbar ist.",
"disable": "Deaktivieren",
"use_official": "Offizielle Konfiguration nutzen",
"custom": "Benutzerdefiniert",
"enable": "Aktivieren",
"token_url": "Token-URL",
"project_id": "Projekt-ID",
"private_key": "Privater Schlüssel",
"client_email": "Client-E-Mail"
},
"smtp": {
"desc": "Für E-Mail-Benachrichtigungen (Pro-Funktion) und Anmeldungsbestätigungen wird SMTP benötigt.",
"sub_desc": "SMTP-Einstellungen konfigurieren:",
"enable": "Aktivieren",
"host": "Host",
"port": "Port",
"from": "Absender",
"username": "Benutzername",
"password": "Passwort",
"how_to": "SMTP einrichten?",
"send_test_email": "Test-E-Mail senden"
},
"agora": {
"desc": "Für Video-/Sprachanrufe nutzen wir Agora.",
"sub_desc": "Jedes Agora-Projekt bietet 10.000 kostenlose Minuten/Monat. Erstelle ein Projekt und folge der Anleitung.",
"enable": "Aktivieren",
"how_to": "Agora einrichten?"
},
"third_app": {
"key": "API-Sicherheitsschlüssel",
"update": "Geheimnis aktualisieren",
"update_tip": "API-Geheimnis wirklich aktualisieren? Vorheriges Geheimnis wird ungültig.",
"key_tip": "Sicherheitsschlüssel für verschlüsselte Kommunikation zwischen Server und Drittanbieter-App.",
"how_to": "Anleitung"
},
"login": {
"password": "Passwort",
"password_desc": "Anmeldung mit Passwort erlauben.",
"magic_link": "Magic Link",
"magic_link_desc": "Anmeldung mit Magic Link erlauben.",
"google": "Google",
"google_desc": "Anmeldung mit Google erlauben.",
"github": "GitHub",
"github_desc": "Anmeldung mit GitHub erlauben.",
"metamask": "Metamask",
"metamask_desc": "Anmeldung mit Metamask erlauben.",
"oidc": "OIDC",
"oidc_desc": "Anmeldung mit OIDC erlauben.",
"oidc_custom": "Benutzerdefiniert",
"more_details": "Details? Siehe <0>Dokumentation</0>."
},
"widget": {
"tip": "Erweitere VoceChat mit dem Widget-SDK!",
"code": "Codebeispiel",
"code_comment": "Diesen Code in deine HTML-Datei einfügen",
"config": "Konfigurationsbeschreibung",
"param_key": "Parameter",
"default_value": "Standardwert",
"remark": "Hinweise",
"custom_style_tip": "Für präzise Positionierung: Nutze die Widget-ID in deinem HTML/CSS:",
"css_code_tip": "Eigenes CSS wird als Datei geladen",
"param_id": "Widget-ID (Server ≥ v0.3.12)",
"param_host": "Benutzer-ID für Chat-Partner",
"param_title": "Chat-Popup-Titel",
"param_logo": "Logo-URL des Popups",
"param_auto_reg": "true: Automatische Registrierung, false: Manuelle Eingabe erforderlich",
"param_login_token": "Login-Token für externe Nutzersysteme (siehe Dokumentation). Standard: leer lassen!",
"param_theme_color": "Widget-Farbe",
"param_close_width": "Breite (geschlossen)",
"param_close_height": "Höhe (geschlossen)",
"param_open_width": "Breite (geöffnet)",
"param_open_height": "Höhe (geöffnet)",
"param_welcome": "Benutzerdefinierte Willkommensnachricht",
"param_position": "Position: links/rechts",
"share_link": "Teile den Widget-Link für direkte Chats",
"widget_faq": "„Alle dürfen beitreten“ zuerst aktivieren"
},
"version": {
"client_version": "Client-Version",
"server_version": "Server-Version",
"build_time": "Build-Zeitstempel",
"sync": "Auf neueste Webclient-Version synchronisieren"
},
"api_doc": {
"desc": "Detaillierte API-Dokumentation zum Erstellen eigener Chat-Tools.",
"access": "URL:",
"use_method": "Anwendung:",
"step_1": "Schritt 1: Eigene Server-URL eintragen",
"step_2": "Schritt 2: Login-Token eingeben",
"step_2_desc": "Token per X-API-Key-Header abrufen oder unten kopieren:",
"last": "Jede API hat einen „Testen“-Button zur Debugging."
}
}
+39
View File
@@ -0,0 +1,39 @@
{
"title": "Willkommen auf dem Server {{name}}",
"desc": "Hier sind erste Schritte für dich:",
"invite": "Lade Freunde oder Teammitglieder ein",
"start_by_channel": "Erstelle einen Kanal für Gespräche",
"start_by_dm": "Sende eine Direktnachricht",
"download": "Mobile Apps herunterladen",
"help": "Fragen? Besuche unser Hilfe-Center",
"sign_in_tip": "Zum Senden anmelden",
"onboarding": {
"title": "VoceChat-Einrichtung",
"welcome": "Willkommen bei VoceChat!",
"welcome_desc": "Dieser Bereich gehört dir. Lass uns beginnen!",
"start": "Starten",
"new_server": "Server benennen",
"server_desc": "Server sind Umgebungen für Teamarbeit und Chats.",
"placeholder_server": "Servernamen eingeben",
"create_server": "Server erstellen",
"admin_title": "Richte jetzt dein Admin-Konto ein",
"admin_desc": "Du bist der erste Benutzer und Admin!",
"sign": "Registrieren",
"invite_title": "Letzter Schritt: Andere einladen!",
"invite_desc": "Wer darf sich auf diesem Server registrieren?",
"confirm": "Bestätigen",
"done_welcome": "Willkommen auf {{serverName}}",
"done_title": "Stolz präsentiert von VoceChat",
"done_desc": "Weitere Einstellungen (Domain, Berechtigungen, Sicherheit) unter <0>Einstellungen</0>",
"enter": "Starten",
"last_tip": "Jetzt andere einladen!",
"last_desc": "Sende Einladungslink an zukünftige Mitglieder:",
"done": "Fertig",
"welcome_page": "Willkommensseite",
"set_name": "Namen festlegen",
"admin_account": "Admin-Konto",
"who_sign_up": "Registrierungsberechtigung",
"invites": "Einladungen",
"update_domain_tip": "Falsche Domain? Hier aktualisieren:"
}
}
+5
View File
@@ -0,0 +1,5 @@
{
"welcome": "👋 Hallo! Schön, dich kennenzulernen!",
"placeholder_send": "Eingabe und Enter drücken",
"start_chat": "Chat starten"
}
+8 -3
View File
@@ -140,7 +140,7 @@ function build(previousFileSizes) {
messages = formatWebpackMessages({
errors: [errMessage],
warnings: []
warnings: [],
});
} else {
messages = formatWebpackMessages(
@@ -178,7 +178,7 @@ function build(previousFileSizes) {
const resolveArgs = {
stats,
previousFileSizes,
warnings: messages.warnings
warnings: messages.warnings,
};
return resolve(resolveArgs);
@@ -187,8 +187,13 @@ function build(previousFileSizes) {
}
function copyPublicFolder() {
const ignoreFiles = ["widget_demo.html", "CNAME", "email.tpl.html", "robots.txt"];
fs.copySync(paths.appPublic, paths.appBuild, {
dereference: true,
filter: (file) => file !== paths.appHtml
filter: (file) => {
const [fileName] = file.split("/").slice(-1);
const filters = file !== paths.appHtml && !ignoreFiles.includes(fileName);
return filters;
},
});
}
+9 -9
View File
@@ -26,7 +26,7 @@ import { PlateEditor } from "@udecode/plate-common";
const Modes = {
text: "text",
markdown: "markdown"
markdown: "markdown",
};
interface IProps {
context?: ChatContext;
@@ -35,20 +35,20 @@ interface IProps {
const Send: FC<IProps> = ({
// 发给谁,或者是 channel,或者是 user
context = "channel",
id
id,
}) => {
const editorRef = useRef<PlateEditor | null>(null);
const { t } = useTranslation("chat");
const { unblockThisContact, blocked, isChannelOwner } = useUserOperation({
uid: context == "dm" ? id : undefined,
cid: context == "channel" ? id : undefined
cid: context == "channel" ? id : undefined,
});
const { resetStageFiles } = useUploadFile({ context, id });
const { getDraft, getUpdateDraft } = useDraft({ context, id });
const [msg, setMsg] = useState<MessageWithMentions>({
text: "",
mentions: []
mentions: [],
});
const [markdownEditor, setMarkdownEditor] = useState(null);
const [markdownFullscreen, setMarkdownFullscreen] = useState(false);
@@ -95,7 +95,7 @@ const Send: FC<IProps> = ({
type: "text",
content: text,
from_uid,
properties
properties,
});
}
// send files
@@ -112,10 +112,10 @@ const Send: FC<IProps> = ({
content_type: type,
name,
size,
local_id: ts
local_id: ts,
},
from_uid,
sending: true
sending: true,
};
addLocalFileMessage(tmpMsg);
});
@@ -129,7 +129,7 @@ const Send: FC<IProps> = ({
type: "markdown",
content,
from_uid,
properties: { local_id: +new Date() }
properties: { local_id: +new Date() },
});
};
const toggleMode = () => {
@@ -213,7 +213,7 @@ const Send: FC<IProps> = ({
<MarkdownEditor
updateDraft={getUpdateDraft("markdown")}
initialValue={getDraft("markdown")}
height={markdownFullscreen ? `calc(100vh - 168px)` : `30vh`}
height={markdownFullscreen ? `calc(100dvh - 168px)` : `30vh`}
placeholder={placeholder}
setEditorInstance={setMarkdownEditor}
sendMarkdown={sendMarkdown}
+1 -2
View File
@@ -5,14 +5,13 @@ import "dayjs/locale/ja";
import "dayjs/locale/fr";
import "dayjs/locale/pt";
import "dayjs/locale/tr";
import "dayjs/locale/de";
import "dayjs/locale/es";
import duration from "dayjs/plugin/duration";
import isToday from "dayjs/plugin/isToday";
import isYesterday from "dayjs/plugin/isYesterday";
import relativeTime from "dayjs/plugin/relativeTime";
// import i18n from '../i18n';
dayjs.extend(duration);
dayjs.extend(relativeTime);
dayjs.extend(isToday);
+2 -1
View File
@@ -5,13 +5,14 @@ import SettingBlock from "@/components/SettingBlock";
import StyledRadio from "@/components/styled/Radio";
// type Props = {}
export type LanguageType = "en" | "zh" | "jp" | "tr" | "pt" | "es" | "fr" | "ru";
export type LanguageType = "en" | "zh" | "jp" | "tr" | "pt" | "es" | "fr" | "ru" | "de";
export const LangMap: Record<LanguageType, string> = {
en: "English",
zh: "中文",
tr: "Türkçe",
jp: "日本語",
pt: "Portuguese",
de: "Deutsch",
fr: "Français",
es: "Español",
ru: "Русский",
+2 -1
View File
@@ -5,13 +5,14 @@ import SettingBlock from "@/components/SettingBlock";
import StyledRadio from "@/components/styled/Radio";
// type Props = {}
export type LanguageType = "en" | "zh" | "jp" | "tr" | "pt" | "es" | "fr" | "ru";
export type LanguageType = "en" | "zh" | "jp" | "tr" | "pt" | "es" | "fr" | "ru" | "de";
export const LangMap: Record<LanguageType, string> = {
en: "English",
zh: "中文",
tr: "Türkçe",
jp: "日本語",
pt: "Portuguese",
de: "Deutsch",
fr: "Français",
es: "Español",
ru: "Русский",
+1 -1
View File
@@ -33,7 +33,7 @@ const Index = ({ handleClose, hostId }: Props) => {
"flex flex-col bg-white dark:bg-gray-700 rounded-md overflow-hidden",
embed
? "w-full h-full"
: `w-full h-full md:max-w-lg md:h-[calc(100vh_-_20px)] m-auto md:my-2 md:shadow-lg rounded-none md:rounded-md`
: `w-full h-full md:max-w-lg md:h-[calc(100dvh_-_20px)] m-auto md:my-2 md:shadow-lg rounded-none md:rounded-md`
)}
>
<Header handleClose={handleClose} />