From 7f1ca5f443d8e8e8be2c25e6c629a6bf18700931 Mon Sep 17 00:00:00 2001 From: Marc Itzenthaler Date: Tue, 28 Nov 2023 16:42:12 +0100 Subject: [PATCH] chore: added simple check for formal language and fixes formal languge --- src/i18n.ts | 52 +++++++-- src/resources/i18n/de.informal.json | 173 +++++++++++++++++++++++++--- src/resources/i18n/de.json | 28 ++--- 3 files changed, 209 insertions(+), 44 deletions(-) diff --git a/src/i18n.ts b/src/i18n.ts index dca2974db..55593d1b3 100644 --- a/src/i18n.ts +++ b/src/i18n.ts @@ -75,29 +75,57 @@ export const init = (config: InitOptions) => { return; } - const deLanguage = [ - ...Object.keys( - flatten(i18n.getDataByLanguage(FALLBACK_LNG).common) - ) - ].sort(); + const deLanguage: { [key: string]: string } = flatten( + i18n.getDataByLanguage(FALLBACK_LNG).common + ); + const deLanguageKeys = [...Object.keys(deLanguage)].sort( + (a, b) => a.localeCompare(b) + ); const languages = Object.keys( i18n.services.resourceStore.data ).filter((lng) => lng !== FALLBACK_LNG); languages.forEach((lng) => { - const currLanguage = [ - ...Object.keys( - flatten(i18n.getDataByLanguage(lng).common) - ) - ].sort(); - const missingKeys = _.xor(deLanguage, currLanguage); + const currLanguage: { [key: string]: string } = flatten( + i18n.getDataByLanguage(lng).common + ); + const currLanguageKeys = [ + ...Object.keys(currLanguage) + ].sort((a, b) => a.localeCompare(b)); + + if (lng.indexOf('_informal') >= 0) { + Object.entries({ + ...deLanguage, + ...currLanguage + }).forEach(([key, text]) => { + const formalIndex = text.match( + /( Sie|Sie | Ihr|Ihr )/i + ); + if (!formalIndex) return; + + if (currLanguageKeys.includes(key)) { + console.error( + `[${lng}] has formal language sentence in key "${key}" near "${text.substring( + formalIndex.index - 25, + formalIndex.index + 25 + )}"` + ); + return; + } + console.error( + `[${lng}] has no formal language form for key "${key}" ("${text}")` + ); + }); + } + + const missingKeys = _.xor(deLanguageKeys, currLanguageKeys); if (missingKeys.length <= 0) { return; } missingKeys.forEach((missingKey) => { - if (!deLanguage.includes(missingKey)) { + if (!deLanguageKeys.includes(missingKey)) { console.error( `[${lng}] has key "${missingKey}" but its missing in fallback language "${FALLBACK_LNG}"` ); diff --git a/src/resources/i18n/de.informal.json b/src/resources/i18n/de.informal.json index 9b136c11b..76615c5cf 100644 --- a/src/resources/i18n/de.informal.json +++ b/src/resources/i18n/de.informal.json @@ -83,12 +83,36 @@ "info": "Wir haben Dich gebeten, die Chat-Regeln einzuhalten.

Weil Du heute die Chat-Regeln wiederholt nicht eingehalten hast, haben wir Dich für den heutigen Chat ausgeschlossen.

Mache Dich mit den Chat-Regeln vertraut!

Wenn Du bereit bist, die Chat-Regeln einzuhalten, bist Du ab morgen wieder im Chat willkommen!" } }, - "termsAndConditionOverlay": { - "labels": { - "here": "hier" + "booking": { + "availability": { + "description": "Gib hier Deine allgemeine Verfügbarkeit an, damit Ratsuchende Termine bei Dir buchen können.", + "title": "Deine Verfügbarkeit" + }, + "calender": { + "synchroniseCalender": { + "description": "Synchronisiere Deinen Kalender, den Du in Deiner Beratungsstelle nutzt, mit der Online Beratung. Deine Verfügbarkeit wird dann automatisch angepasst und Terminkonflikte verhindert." + } }, + "event": { + "description": "Deine Nachricht zum Termin", + "your": { + "counselor": "Dein Berater" + }, + "tooltip": { + "consultant": "Falls Du den Termin nicht in dem vom Ratsuchenden gewählten Modus wahrnehmen kannst, generieren wir für Dich immer einen Link zum Video-Call als Alternative.", + "adviceSeeker": "Falls Dein:e Berater:in den Termin nicht in dem von Dir gewählten Modus wahrnehmen kann, generieren wir für Dich immer einen Link zum Video-Call als Alternative." + } + }, + "my": { + "booking": { + "schedule": "Vereinbare jetzt einen Termin mit" + } + } + }, + "termsAndConditionOverlay": { "contentLine1": { "termsAndCondition": "Wir haben die Nutzungsbedingungen der Online-Beratung aktualisiert. Um die Online-Beratung weiter nutzen zu können, benötigen wir Deine Zustimmung.", + "privacy": "Wir haben die Datenschutzerklärung der Online-Beratung aktualisiert. Den aktuellen Stand findest Du hier.", "termsAndConditionAndPrivacy": "Wir haben die Nutzungsbedingungen und Datenschutzerklärung der Online-Beratung aktualisiert. Um die Online-Beratung weiter nutzen zu können, benötigen wir Deine Zustimmung." } }, @@ -111,6 +135,9 @@ }, "errorOverlay": { "headline": "Ups! Wir konnten den Chat gerade nicht löschen. Bitte versuche es erneut." + }, + "successOverlay": { + "headline": "Du hast den Chat erfolgreich gelöscht." } }, "e2ee": { @@ -169,6 +196,19 @@ } } }, + "error": { + "statusCodes": { + "400": { + "description": "Die von Dir eingegebene URL ist ungültig." + }, + "401": { + "description": "Leider bist Du nicht berechtigt diese Seite einzusehen." + }, + "500": { + "description": "Wie es aussieht, haben wir momentan ein Serverproblem.
Versuche es später noch einmal." + } + } + }, "furtherSteps": { "step1": { "info": "Wir haben Deine Nachricht erhalten." @@ -229,9 +269,22 @@ "message": "Dein_e Moderator_in hat den Chat noch nicht gestartet. Sobald Dein_e Moderator_in den Chat gestartet hat, kannst Du mit uns chatten. Bitte habe noch etwas Geduld." }, "warning": { + "consultant": { + "message": "Dein_e Moderator_in hat den Chat noch nicht gestartet. Sobald Dein_e Moderator_in den Chat gestartet hat, kannst Du mit uns chatten. Bitte habe noch etwas Geduld." + }, "message": "Dein_e Berater_in/Moderator_in hat den Chat noch nicht gestartet. Sobald Dein_e Berater_in/Moderator_in den Chat gestartet hat, kannst Du mit uns chatten. Bitte habe noch etwas Geduld." } }, + "joinError": { + "overlay": { + "headline": "Es ist ein Fehler aufgetreten. Bitte versuche es erneut." + } + }, + "leaveChat": { + "securityOverlay": { + "headline": "Möchtest Du den Chat wirklich verlassen?" + } + }, "listItem": { "subjectEmpty": { "self": "Du hast den Chat erstellt." @@ -262,7 +315,7 @@ "text2": "Öffne nun Deinen Link zur Online-Beratung mit einem der unterstützten Browser." }, "banner": { - "content": "Bitte verwenden Sie einen anderen Browser, damit Video-Calls funktionieren können.", + "content": "Bitte verwende einen anderen Browser, um Video-Calls zu ermöglichen.", "more": "Mehr erfahren" }, "asker": { @@ -312,6 +365,20 @@ } }, "message": { + "appointmentCancelled": { + "title": "Dein Termin wurde abgesagt" + }, + "appointmentRescheduled": { + "title": "Dein Termin wurde verschoben" + }, + "appointmentSet": { + "title": "Dein Termin wurde erstellt" + }, + "submit": { + "booking": { + "headline": "Oder vereinbaren Sie jetzt einen Termin" + } + }, "delete": { "deleted": { "own": "Du hast diese Nachricht gelöscht." @@ -319,6 +386,9 @@ "overlay": { "copy": "Möchtest Du die Nachricht wirklich löschen?" } + }, + "video": { + "description": "Du kannst jetzt an der Videokonferenz teilnehmen" } }, "notifications": { @@ -327,6 +397,9 @@ }, "enquiry": { "new": "Du hast eine neue Live-Chat Anfrage!" + }, + "initialRequest": { + "new": "Du hast eine neue Erstanfrage!" } }, "overlay": { @@ -457,6 +530,9 @@ "reassignmentConsultant": { "description": "Kollege_in hat Dir eine_n Ratsuchende_n zugewiesen." }, + "error": { + "description": "Leider können wir Deine Einstellungen momentan nicht aktualisieren. Bitte versuche es später noch einmal." + }, "toggleError": { "description": "Leider können wir Deine Benachrichtigungen zurzeit nicht aktivieren. Bitte versuche es später noch einmal." }, @@ -464,7 +540,7 @@ "info": "Du hast noch keine E-Mail-Adresse hinzugefügt.", "modal": { "description": "Die Angabe Deiner E-Mail-Adresse ist freiwillig und wird ausschließlich verwendet, um Dich über neue Antworten Deines_r Berater_in zu informieren. Deine E-Mail-Adresse ist für Berater_innen nicht sichtbar.", - "errorMessage": "Leider können wir Ihre E-Mail-Adresse momentan nicht speichern. Bitte versuchen Sie es später noch einmal oder kontaktieren Sie unseren Support." + "errorMessage": "Leider können wir Deine E-Mail-Adresse momentan nicht speichern. Bitte versuche es später noch einmal oder kontaktiere unseren Support." } } }, @@ -477,11 +553,30 @@ "message": "Du hast den Empfang von Benachrichtigungen für diesen Browser abgelehnt. Um Push-Benachrichtigungen zu aktivieren, musst Du diese zuerst in Deinen Browsereinstellungen zulassen." } }, + "documentation": { + "description": "Hast Du Fragen? Im Handbuch findest Du detaillierte Informationen zu den wichtigsten Funktionen der Online-Beratungsplattform." + }, "spokenLanguages": { "info": "Wähle die Sprache(n) aus, in der Du die Ratsuchenden beraten kannst. Deutsch ist als Standardsprache vorausgewählt und kann nicht entfernt werden." }, "appLanguage": { "info": "Stelle hier die Sprache der Anwendung ein." + }, + "unsetEmail": { + "confirmOverlay": { + "benefit": { + "1": "erhältst Du keine E-Mail-Benachrichtigung, wenn Dein_e Berater_in Dir geschrieben hat", + "2": "kannst Du Dein Passwort nicht zurücksetzen, falls Du es vergessen hast." + }, + "copy": "Wenn Du Deine E-Mail-Adresse löschst:", + "headline": "Möchtest Du Deine E-Mail-Adresse wirklich löschen?" + }, + "errorOverlay": { + "headline": "Ups! Wir konnten die E-Mail-Adresse gerade nicht löschen. Bitte versuche es noch einmal." + }, + "successOverlay": { + "headline": "Du hast Deine E-Mail-Adresse erfolgreich gelöscht." + } } }, "qrCode": { @@ -622,7 +717,7 @@ "title": "{{oldConsultant}} möchte Dich an {{newConsultant}} übergeben.", "description": { "noTeam": "{{newConsultant}} kann somit den kompletten Nachrichtenverlauf lesen und ist für Dich verantwortlich. {{oldConsultant}} hat keinen Zugriff mehr auf die Nachrichten.", - "team": "{{newConsultant}} kann somit den kompletten Nachrichtenverlauf lesen und ist für Sie verantwortlich." + "team": "{{newConsultant}} kann somit den kompletten Nachrichtenverlauf lesen und ist für Dich verantwortlich." }, "question": "Stimmst Du der Übergabe zu?.", "accepted": { @@ -673,15 +768,26 @@ "empty": { "mySessions": "Du hast zurzeit keine aktiven Beratungen", "teamSessions": "Dein Team hat keine aktiven Beratungen", - "perSessions": "Du hast zurzeit keine aktiven Peer-Beratungen" + "peerSessions": "Du hast zurzeit keine aktiven Peer-Beratungen" + }, + "unavailable": { + "description": "Aktiviere Deine Verfügbarkeit und erhalte hier die Live-Chat Anfragen von anonymen Ratsuchenden" } }, "statusOverlay": { + "error": { + "text": "Es ist ein Problem aufgetreten, bitte versuche es erneut" + }, "success": { "headline": "Deine Nachricht wurde versendet", "text": "Vielen Dank für Deine Anfrage. Wir antworten Dir werktags innerhalb von 48 Stunden. Wenn Du Deine E-Mail-Adresse angegeben hast, erhältst Du eine Benachrichtigung, sobald unsere Antwort vorliegt." } }, + "tools": { + "calendar": { + "description": "Trage Deine Urlaube oder sonstigen Termine in den Kalender ein, sodass die Ratsuchenden in dieser Zeit keine Termine bei Dir buchen können.
Melde Dich mit der gleichen E-Mail-Adresse und Passwort an, das Du auch hier bei der Online Beratung verwendest." + } + }, "twoFactorAuth": { "subtitle": "Nutze neben Deinem Passwort einen zweiten Faktor für die Anmeldung. Dadurch wird Dein Konto zusätzlich abgesichert.", "activate": { @@ -695,17 +801,23 @@ "copy": "Installiere Dir auf Deinem Smartphone oder Tablet eine passende Authenticator-App. Alternativ kannst Du auch Deine E-Mail-Adresse als zweiten Faktor verwenden." }, "email": { + "input": { + "duplicate": { + "info": "Diese E-Mail-Adresse wird bereits von einer anderen Person verwendet. Bitte gib eine andere E-Mail-Adresse an. Oder nutze die App als zweiter Faktor." + }, + "info": "Du kannst nur eine E-Mail-Adresse bei uns hinterlegen. Falls Du die E-Mail-Adresse hier änderst, erhältst Du auf diese E-Mail-Adresse zukünftig auch die Benachrichtigungen." + }, + "resend": { + "hint": "Wir haben Dir einen Code an Deine E-Mail-Adresse geschickt. Bitte gib den Code ein." + }, + "step2": { + "copy": "Bitte gib hier Deine E-Mail-Adresse an." + }, "step3": { "copy": { "1": "Wir haben Dir gerade eine E-Mail an", "2": "geschickt. Bitte gib den Code aus der E-Mail hier ein." } - }, - "input": { - "info": "Du kannst nur eine E-Mail-Adresse bei uns hinterlegen. Falls Du die E-Mail-Adresse hier änderst, erhältst Du auf diese E-Mail-Adresse zukünftig auch die Benachrichtigungen.", - "duplicate": { - "info": "Diese E-Mail-Adresse wird bereits von einer anderen Person verwendet. Bitte gib eine andere E-Mail-Adresse an. Oder nutze die App als zweiter Faktor." - } } }, "app": { @@ -714,18 +826,14 @@ "copy": "Bitte installiere Dir auf Deinem Smartphone oder Tablet eine passende Authenticator-App, wie zum Beispiel die FreeOTP oder Google Authenticator App. Beide Apps sind im Google Play oder Apple App Store verfügbar." }, "step3": { - "title": "Für die Online-Beratung zur App hinzu", + "title": "Füge die Online-Beratung zur App hinzu", "copy": "Du hast zwei Möglichkeiten, die Online-Beratung zur App hinzuzufügen:", - "visualisation": { - "label": "Hinzufügen" - }, "connect": { "qrCode": "Öffne die App und scanne den folgenden QR-Code:", "key": "Öffne die App und gebe den folgenden 32-stelligen Schlüssel ein:" } }, "step4": { - "title": "Einmal-Code eingeben", "copy": "Gib den Einmal-Code ein, der von der App generiert wird und klicke auf „Speichern“, um die Einrichtung abzuschließen." } }, @@ -764,11 +872,29 @@ "title": "Schütze nun Dein Konto", "copy": "Du musst jetzt einen zweiten Faktor (App oder E-Mail) für die Anmeldung in der Online-Beratung hinterlegen. Das dient der Sicherheit und schützt Dein Konto vor einem möglichen unbefugten Zugriff.

Ohne einen zweiten Faktor darfst Du nicht mehr online beraten." } + }, + "switch": { + "type": { + "label": "Dein zweiter Faktor" + } } }, "userProfile": { "reassign": { "description": "Du kannst die Unterhaltung einem anderen Teammitglied zuweisen. Diese Person ist dann für die_den Ratsuchende_n verantwortlich." + }, + "tools": { + "description": "Schalte Tools für die_den Ratsuchende_n frei. ", + "options": { + "saveError": "Beim Werkzeugwechsel ist ein Problem aufgetreten. Bitte versuche es erneut." + }, + "share": { + "title": "Sieh hier, welche Inhalte mit Dir geteilt wurden.", + "info": "Nur zugewiesene Berater_innen können die Inhalte der Ratsuchenden einsehen. Wenn Du aus der Teamberatung auf die Inhalte zugreifst, sind die Ratsuchenden nicht vorausgewählt." + }, + "modal": { + "description": "Wähle die Tools aus, die Du dem_der Ratsuchenden zur Verfügung stellen möchtest." + } } }, "videoCall": { @@ -786,6 +912,16 @@ "unsupported": { "copy": "Dein Gerät erfüllt nicht alle nötigen technischen Vorgaben für einen Video-Call. Bitte folge dieser Anleitung, um einen Video-Call starten zu können. Dafür brauchst Du möglicherweise die Unterstützung Deiner EDV." } + }, + "statusPage": { + "closed": { + "title": "Dein Video-Call wurde erfolgreich beendet.", + "action": "Bitte schließe diesen Tab, um zu Beratung & Hilfe zurückzukehren." + }, + "unauthorized": { + "reason": "Leider bist Du nicht berechtigt diese Seite einzusehen.", + "action": "Bitte schließe diesen Tab, um zu Beratung & Hilfe zurückzukehren." + } } }, "videoConference": { @@ -812,6 +948,7 @@ } }, "walkthrough": { + "subtitle": "Um Dir die einzelnen Funktionen zu erklären, haben wir einen kurzen Rundgang für Dich vorbereitet.
Du kannst ihn jederzeit abbrechen oder in Deinem Profil erneut starten.", "step": { "0": { "intro": "Um Dir die einzelnen Funktionen zu erklären, haben wir einen kurzen Rundgang für Dich vorbereitet.

Du kannst ihn jederzeit abbrechen oder in Deinem Profil erneut starten." diff --git a/src/resources/i18n/de.json b/src/resources/i18n/de.json index 982ed9710..633e1aa58 100644 --- a/src/resources/i18n/de.json +++ b/src/resources/i18n/de.json @@ -340,7 +340,7 @@ "LINK": "Videoberatung" }, "tooltip": { - "consultant": "Falls Sie den Termin nicht in dem vom Ratsuchende gewählten Modus wahrnehmen können, generieren wir für Sie immer einen Link zum Video-Call als Alternative.", + "consultant": "Falls Sie den Termin nicht in dem vom Ratsuchenden gewählten Modus wahrnehmen können, generieren wir für Sie immer einen Link zum Video-Call als Alternative.", "adviceSeeker": "Falls Ihr:e Berater:in den Termin nicht in dem von Ihnen gewählten Modus wahrnehmen kann, generieren wir für Sie immer einen Link zum Video-Call als Alternative." } }, @@ -2141,7 +2141,7 @@ "known": "Aktuell liegen keine Erstanfragen vor", "mySessions": "Sie haben zurzeit keine aktiven Beratungen", "teamSessions": "Ihr Team hat keine aktiven Beratungen", - "peersessions": "Sie haben zurzeit keine aktiven Peer-Beratungen", + "peerSessions": "Sie haben zurzeit keine aktiven Peer-Beratungen", "archived": "Es sind noch keine Beratungen archiviert" }, "unavailable": { @@ -2222,17 +2222,8 @@ } }, "twoFactorAuth": { + "subtitle": "Nutzen Sie neben Ihrem Passwort einen zweiten Faktor für die Anmeldung. Dadurch wird Ihr Konto zusätzlich abgesichert.", "activate": { - "step1": { - "app": "Mit Authenticator Application", - "copy": "Installieren Sie sich auf Ihrem Smartphone oder Tablet eine passende Authenticator-App. Alternativ können Sie auch Ihre E-Mail-Adresse als zweiten Faktor verwenden.", - "email": "Per E-Mail", - "title": "Zweiten Faktor wählen", - "visualisation": { - "label": "Auswahl" - }, - "disable": "Authentifizierung deaktivieren" - }, "radio": { "label": { "app": "App", @@ -2243,6 +2234,16 @@ "email": "Sie erhalten bei der Anmeldung eine E-Mail mit einem Code. Diesen Code müssen Sie dann eingeben." } }, + "step1": { + "app": "Mit Authenticator Application", + "copy": "Installieren Sie sich auf Ihrem Smartphone oder Tablet eine passende Authenticator-App. Alternativ können Sie auch Ihre E-Mail-Adresse als zweiten Faktor verwenden.", + "email": "Per E-Mail", + "title": "Zweiten Faktor wählen", + "visualisation": { + "label": "Auswahl" + }, + "disable": "Authentifizierung deaktivieren" + }, "email": { "input": { "duplicate": { @@ -2396,7 +2397,6 @@ "next": "Weiter", "save": "Speichern" }, - "subtitle": "Nutzen Sie neben Ihrem Passwort einen zweiten Faktor für die Anmeldung. Dadurch wird Ihr Konto zusätzlich abgesichert.", "switch": { "active": { "label": "Zwei-Faktor-Authentifizierung aktiviert" @@ -2531,7 +2531,7 @@ "optionsPlaceholder": "Wähle eine Option...", "title": "Tools", "options": { - "saveError": "Beim Werkzeugwechsel ist ein Problem aufgetreten. Bitte versuche es erneut." + "saveError": "Beim Werkzeugwechsel ist ein Problem aufgetreten. Bitte versuchen Sie es erneut." }, "share": { "sharedContent": "Zu den geteilten Inhalten",