diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a187f7..2732609 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/). - `SPA` env variable to have static page with loading spinner before redirect - `de`, `fr`, `es`, `it`, `cn` base folders for translations +- finish translating `de` and `en` +- add `yarn translation:sort` to order translations (to ensure the same order + when we add / change translations) +- add `yarn translation:missing ` to print a list of missing translations + for the given language (this takes `en` as a baseline) ### Changed diff --git a/components/with.auth.tsx b/components/with.auth.tsx index a32e397..9f1cd34 100644 --- a/components/with.auth.tsx +++ b/components/with.auth.tsx @@ -2,6 +2,7 @@ import {useQuery} from '@apollo/react-hooks' import {AxiosRequestConfig} from 'axios' import {useRouter} from 'next/router' import React, {useEffect, useState} from 'react' +import {useTranslation} from 'react-i18next' import {ME_QUERY, MeQueryData} from '../graphql/query/me.query' import {LoadingPage} from './loading.page' @@ -38,6 +39,7 @@ export const authConfig = async (config: AxiosRequestConfig = {}): Promise { return props => { + const { t } = useTranslation() const router = useRouter() const [access, setAccess] = useState(false) const {loading, data, error} = useQuery(ME_QUERY) @@ -78,11 +80,11 @@ export const withAuth = (Component, roles: string[] = []): React.FC => { }, [data]) if (loading) { - return + return } if (!access) { - return + return } return diff --git a/locales/de/admin.json b/locales/de/admin.json index 15637fe..a70c6db 100644 --- a/locales/de/admin.json +++ b/locales/de/admin.json @@ -1,8 +1,8 @@ { - "home": "Home", - "users": "Benutzer", "forms": "Formulare", - "submissions": "Eingaben", + "home": "Home", "profile": "Profil", - "username": "Benutzername" + "submissions": "Eingaben", + "username": "Benutzername", + "users": "Benutzer" } diff --git a/locales/de/common.json b/locales/de/common.json index b2b8d11..c3166e0 100644 --- a/locales/de/common.json +++ b/locales/de/common.json @@ -1,7 +1,9 @@ { - "logout": "Abmelden", + "admin": "Administration", + "checkingCredentials": "Zugangsdaten werden geprüft", + "loadingCredentials": "Lade Zugangsdaten", "login": "Anmelden", - "register": "Benutzer erstellen", + "logout": "Abmelden", "recover": "Passwort vergessen", - "admin": "Administration" + "register": "Benutzer erstellen" } diff --git a/locales/de/form.json b/locales/de/form.json index 4f5d210..01eddd2 100644 --- a/locales/de/form.json +++ b/locales/de/form.json @@ -1,97 +1,97 @@ { + "baseData": { + "isLive": "Öffentlich", + "language": "Sprache", + "showFooter": "Fußzeile anzeigen", + "title": "Titel" + }, + "baseDataTab": "Basis Daten", "building": "Formular wird aufgebaut", - "submitted": "Vielen dank für ihre Eingaben!", - "restart": "Formular neu starten", + "confirmDelete": "Wollen sie dieses Formular mit allen Eintragungen löschen?", + "create": "Neues Formular erstellen", + "createNow": "Jetzt Anlegen", + "created": "Formular Erstellt", + "creationError": "Formular konnte nicht erstellt werden", + "deleteError": "Formular konnte nicht gelöscht werden", + "deleteNow": "Jetzt löschen!", + "deleted": "Formular gelöscht", + "design": { + "answerColor": "Antworten Farbe", + "backgroundColor": "Hintergrund Farbe", + "buttonActiveColor": "Aktive Aktion Farbe", + "buttonColor": "Aktions Farbe", + "buttonTextColor": "Aktion Schrift Farbe", + "font": "Schriftart", + "questionColor": "Fragen Farbe" + }, + "designTab": "Design", + "endPage": { + "action": "Aktion", + "activeColor": "Aktive Farbe", + "addButton": "Aktion hinzufügen", + "bgColor": "Hintergrund Farbe", + "buttons": "Aktionen", + "color": "Text Farbe", + "continueButtonText": "Weiter Text", + "paragraph": "Paragraf", + "show": "Anzeigen", + "text": "Text", + "title": "Titel", + "url": "Url" + }, + "endPageTab": "Abschluss Seite", "loading": "Formular wird geladen", "mange": "Formular \"{{title}}\" bearbeiten", "new": "Neues Formular", - "created": "Formular Erstellt", - "creationError": "Formular konnte nicht erstellt werden", - "create": "Neues Formular erstellen", - "createNow": "Jetzt Anlegen", - "baseDataTab": "Basis Daten", - "selfNotificationsTab": "Benachrichtigungen für Verwalter", - "respondentNotificationsTab": "Benarichtigungen für Nutzer", - "updated": "Formular aktualisiert", - "updateError": "Formular konnte nicht aktualisiert werden", - "updateNow": "Speichern", - "designTab": "Design", - "startPageTab": "Eröffnungs Seite", - "endPageTab": "Abschluss Seite", - "confirmDelete": "Wollen sie dieses Formular mit allen Eintragungen löschen?", - "deleted": "Formular gelöscht", - "deleteError": "Formular konnte nicht gelöscht werden", - "deleteNow": "Jetzt löschen!", - "row": { - "isLive": "Öffentlich", - "title": "Titel", - "admin": "Verwalter", - "language": "Sprache", - "created": "Erstellt", - "lastModified": "Letzte Änderung", - "menu": "" - }, - "baseData": { - "isLive": "Öffentlich", - "title": "Titel", - "language": "Sprache", - "showFooter": "Fußzeile anzeigen" - }, - "design": { - "font": "Schriftart", - "backgroundColor": "Hintergrund Farbe", - "questionColor": "Fragen Farbe", - "answerColor": "Antworten Farbe", - "buttonColor": "Aktions Farbe", - "buttonActiveColor": "Aktive Aktion Farbe", - "buttonTextColor": "Aktion Schrift Farbe" - }, - "endPage": { - "show": "Anzeigen", - "continueButtonText": "Weiter Text", - "paragraph": "Paragraf", - "title": "Titel", - "buttons": "Aktionen", - "url": "Url", - "text": "Text", - "action": "Aktion", - "bgColor": "Hintergrund Farbe", - "activeColor": "Aktive Farbe", - "color": "Text Farbe", - "addButton": "Aktion hinzufügen" - }, - "startPage": { - "show": "Anzeigen", - "continueButtonText": "Weiter Text", - "paragraph": "Paragraf", - "title": "Titel", - "buttons": "Aktionen", - "url": "Url", - "text": "Text", - "action": "Aktion", - "bgColor": "Hintergrund Farbe", - "activeColor": "Aktive Farbe", - "color": "Text Farbe", - "addButton": "Aktion hinzufügen" - }, "respondentNotifications": { "enabled": "Aktiv", - "subject": "Betreff", - "htmlTemplate": "HTML Template", - "htmlTemplateInfo": "Sie können auch MJML<\/u> verwenden um das Template zu gestalten", - "toField": "Empfänger E-Mail", - "toFieldInfo": "Formular E-Mail Feld für Benachrichtigung", "fromEmail": "Absender E-Mail", - "fromEmailInfo": "Der E-Mail Server muss den versand von dieser E-Mail zulassen" + "fromEmailInfo": "Der E-Mail Server muss den versand von dieser E-Mail zulassen", + "htmlTemplate": "HTML Template", + "htmlTemplateInfo": "Sie können auch MJML verwenden um das Template zu gestalten", + "subject": "Betreff", + "toField": "Empfänger E-Mail", + "toFieldInfo": "Formular E-Mail Feld für Benachrichtigung" + }, + "respondentNotificationsTab": "Benarichtigungen für Nutzer", + "restart": "Formular neu starten", + "row": { + "admin": "Verwalter", + "created": "Erstellt", + "isLive": "Öffentlich", + "language": "Sprache", + "lastModified": "Letzte Änderung", + "menu": "", + "title": "Titel" }, "selfNotifications": { "enabled": "Aktiv", - "subject": "Betreff", - "htmlTemplate": "HTML Template", - "htmlTemplateInfo": "Sie können auch MJML<\/u> verwenden um das Template zu gestalten", - "toEmail": "Empfänger E-Mail", - "toEmailInfo": "Als Standard wird die E-Mail des Verwalters verwendet", "fromField": "Absender E-Mail", - "fromFieldInfo": "Formular E-Mail Feld für Benachrichtigung, wird as Reply-To gesetzt" - } + "fromFieldInfo": "Formular E-Mail Feld für Benachrichtigung, wird as Reply-To gesetzt", + "htmlTemplate": "HTML Template", + "htmlTemplateInfo": "Sie können auch MJML verwenden um das Template zu gestalten", + "subject": "Betreff", + "toEmail": "Empfänger E-Mail", + "toEmailInfo": "Als Standard wird die E-Mail des Verwalters verwendet" + }, + "selfNotificationsTab": "Benachrichtigungen für Verwalter", + "startPage": { + "action": "Aktion", + "activeColor": "Aktive Farbe", + "addButton": "Aktion hinzufügen", + "bgColor": "Hintergrund Farbe", + "buttons": "Aktionen", + "color": "Text Farbe", + "continueButtonText": "Weiter Text", + "paragraph": "Paragraf", + "show": "Anzeigen", + "text": "Text", + "title": "Titel", + "url": "Url" + }, + "startPageTab": "Eröffnungs Seite", + "submitted": "Vielen dank für ihre Eingaben!", + "updateError": "Formular konnte nicht aktualisiert werden", + "updateNow": "Speichern", + "updated": "Formular aktualisiert" } diff --git a/locales/de/language.json b/locales/de/language.json index 1683911..5fb76d5 100644 --- a/locales/de/language.json +++ b/locales/de/language.json @@ -1,7 +1,7 @@ { - "en": "English", - "de": "Deutsch", "cn": "繁體中文", + "de": "Deutsch", + "en": "English", "es": "Español", "fr": "Français", "it": "Italiano" diff --git a/locales/de/login.json b/locales/de/login.json index e4a2bb7..03c135c 100644 --- a/locales/de/login.json +++ b/locales/de/login.json @@ -1,7 +1,7 @@ { - "welcomeBack": "Willkomen zurück!", "invalidLoginCredentials": "Benutzername oder Passwort ist falsch", - "usernamePlaceholder": "Benutzername", + "loginNow": "Jetzt Anmelden", "passwordPlaceholder": "Passwort", - "loginNow": "Jetzt Anmelden" + "usernamePlaceholder": "Benutzername", + "welcomeBack": "Willkomen zurück!" } diff --git a/locales/de/profile.json b/locales/de/profile.json index 8277fa5..ca7f2ae 100644 --- a/locales/de/profile.json +++ b/locales/de/profile.json @@ -1,10 +1,10 @@ { - "updated": "Profil Aktualisieren", + "email": "E-Mail", + "firstName": "Vorname", + "language": "Sprache", + "lastName": "Nachname", "updateError": "Profil konnte nicht aktualisiert werden", "updateNow": "Speichern", - "language": "Sprache", - "email": "E-Mail", - "username": "Benutzername", - "firstName": "Vorname", - "lastName": "Nachname" + "updated": "Profil Aktualisieren", + "username": "Benutzername" } diff --git a/locales/de/register.json b/locales/de/register.json index 46a35cf..f5eab56 100644 --- a/locales/de/register.json +++ b/locales/de/register.json @@ -1,6 +1,6 @@ { - "welcome": "Willkommen, bitte bestätige noch deine E-Mail", "credentialsAlreadyInUse": "Deine Daten werden bereits verwendet!", + "gotoLogin": "Sie haben schon einen Account? Weiter zur Anmeldung", "registerNow": "Jetzt Registrieren", - "gotoLogin": "Sie haben schon einen Account? Weiter zur Anmeldung" + "welcome": "Willkommen, bitte bestätige noch deine E-Mail" } diff --git a/locales/de/statistic.json b/locales/de/statistic.json index 71ca91d..832061e 100644 --- a/locales/de/statistic.json +++ b/locales/de/statistic.json @@ -1,5 +1,5 @@ { "totalForms": "Anzahl der Formulare", - "totalUsers": "Anzahl der Benutzer", - "totalSubmissions": "Anzahl der Eingaben" + "totalSubmissions": "Anzahl der Eingaben", + "totalUsers": "Anzahl der Benutzer" } diff --git a/locales/de/submission.json b/locales/de/submission.json index b76de4d..e676b4e 100644 --- a/locales/de/submission.json +++ b/locales/de/submission.json @@ -1,16 +1,16 @@ { - "progress": "Fortschritt", - "created": "Erstellt", - "lastModified": "Letzte Änderung", - "submission": "Eingabe", "add": "Neue Eingabe starten", + "city": "Stadt", + "country": "Land", + "created": "Erstellt", + "device": { + "name": "Geräte Name", + "type": "Geräte Typ" + }, "edit": "Formular bearbeiten", "field": "Feld", - "value": "Wert", - "country": "Land", - "city": "Stadt", - "device": { - "type": "Geräte Typ", - "name": "Geräte Name" - } + "lastModified": "Letzte Änderung", + "progress": "Fortschritt", + "submission": "Eingabe", + "value": "Wert" } diff --git a/locales/de/type.json b/locales/de/type.json index e096352..f3a8f9b 100644 --- a/locales/de/type.json +++ b/locales/de/type.json @@ -1,65 +1,65 @@ { - "deleteNow": "Feld löschen", "confirmDelete": "Wollen sie das Feld wirklich löschen? Bitte beachten sie das es keine Referenzen auf das Feld gibt!", - "title": "Titel", - "description": "Beschreibung", - "required": "Pflichtfeld", - "requiredInfo": "Falls verpflichtend sollte ein Standard Wert gesetzt sein damit Nutzer fortfahren können!", "date": { - "name": "Datum", "default": "Standard Dateum", + "max": "Neuest mögliche Datum", "min": "Ältest mögliche Datum", - "max": "Neuest mögliche Datum" + "name": "Datum" }, + "deleteNow": "Feld löschen", + "description": "Beschreibung", "dropdown": { - "name": "Auswahl Liste", + "addOption": "Auswahl hinzufügen", "default": "Standard Wert", + "name": "Auswahl Liste", "options": "Auswahl", - "titlePlaceholder": "Titel", - "valuePlaceholder": "Wert", "removeOption": "Entfernen", - "addOption": "Auswahl hinzufügen" + "titlePlaceholder": "Titel", + "valuePlaceholder": "Wert" }, "email": { - "name": "E-Mail", - "default": "Standard E-Mail" + "default": "Standard E-Mail", + "name": "E-Mail" }, "hidden": { - "name": "Versteckt", - "default": "Standard Wert" + "default": "Standard Wert", + "name": "Versteckt" }, "link": { - "name": "URL", - "default": "Standard Url" + "default": "Standard Url", + "name": "URL" }, "number": { - "name": "Zahl", - "default": "Standard Zahl" + "default": "Standard Zahl", + "name": "Zahl" }, "radio": { - "name": "Knopf Auswahl Liste", + "addOption": "Auswahl hinzufügen", "default": "Standard Wert", + "name": "Knopf Auswahl Liste", "options": "Auswahl", - "titlePlaceholder": "Titel", - "valuePlaceholder": "Wert", "removeOption": "Entfernen", - "addOption": "Auswahl hinzufügen" + "titlePlaceholder": "Titel", + "valuePlaceholder": "Wert" }, "rating": { - "name": "Bewertung", + "clearNote": "Erneut klicken um Auswahl aufzuheben", "default": "Standard Bewertung", - "clearNote": "Erneut klicken um Auswahl aufzuheben" + "name": "Bewertung" + }, + "required": "Pflichtfeld", + "requiredInfo": "Falls verpflichtend sollte ein Standard Wert gesetzt sein damit Nutzer fortfahren können!", + "textarea": { + "default": "Standard Wert", + "name": "Mehrzeiliger Text" }, "textfield": { - "name": "Einzeiliger Text", - "default": "Standard Wert" - }, - "textarea": { - "name": "Mehrzeiliger Text", - "default": "Standard Wert" + "default": "Standard Wert", + "name": "Einzeiliger Text" }, + "title": "Titel", "yes_no": { - "name": "Ja / Nein", - "default": "Standard Wert" + "default": "Standard Wert", + "name": "Ja / Nein" } } diff --git a/locales/de/user.json b/locales/de/user.json index 29290ea..cd5bc05 100644 --- a/locales/de/user.json +++ b/locales/de/user.json @@ -1,18 +1,18 @@ { + "baseData": "Basis Daten", "confirmDelete": "Wollen sie diesen Benutzer wirklich löschen?", - "deleted": "Benutzer gelöscht", "deleteError": "Benutzer konnte nicht gelöscht werden", "deleteNow": "Jetzt löschen!", + "deleted": "Benutzer gelöscht", "loading": "Benutzer wird geladen", "mange": "Benutzer \"{{email}}\" bearbeiten", "row": { - "roles": "Rolle", - "email": "E-Mail", "created": "Erstellt", - "menu": "" + "email": "E-Mail", + "menu": "", + "roles": "Rolle" }, - "updated": "Benutzer aktualisiert updated", "updateError": "Konnte Benutzer nicht aktualisieren", "updateNow": "Speichern", - "baseData": "Basis Daten" + "updated": "Benutzer aktualisiert updated" } diff --git a/locales/de/validation.json b/locales/de/validation.json index 25916fb..5b450fa 100644 --- a/locales/de/validation.json +++ b/locales/de/validation.json @@ -1,15 +1,15 @@ { - "invalidEmail": "ungültige E-Mail!", - "mandatoryFieldsMissing": "Nicht alle Pflichfelder befüllt", - "usernameRequired": "Bitte einen Benutzernamen angeben", - "emailRequired": "Bitte eine E-Mail angeben", "emailFieldRequired": "Bitte ein E-Mail Feld auswählen", - "languageRequired": "Bitte eine Sprache angeben", - "valueRequired": "Bitte einen Wert angeben", + "emailRequired": "Bitte eine E-Mail angeben", + "invalidEmail": "ungültige E-Mail!", "invalidUrl": "ungültige Url", - "titleRequired": "Bitte einen Titel angeben", - "templateRequired": "Bitte ein Template angeben", - "subjectRequired": "Bitte einen Betreff angeben", + "languageRequired": "Bitte eine Sprache angeben", + "mandatoryFieldsMissing": "Nicht alle Pflichfelder befüllt", + "passwordMinLength": "Passwort muss mindestens 5 Zeichen haben!", "passwordRequired": "Bitte ein Passwort angeben", - "passwordMinLength": "Passwort muss mindestens 5 Zeichen haben!" + "subjectRequired": "Bitte einen Betreff angeben", + "templateRequired": "Bitte ein Template angeben", + "titleRequired": "Bitte einen Titel angeben", + "usernameRequired": "Bitte einen Benutzernamen angeben", + "valueRequired": "Bitte einen Wert angeben" } diff --git a/locales/en/admin.json b/locales/en/admin.json index 38f4d39..f64f9f1 100644 --- a/locales/en/admin.json +++ b/locales/en/admin.json @@ -1,8 +1,8 @@ { - "home": "Home", - "users": "Users", "forms": "Forms", - "submissions": "Submissions", + "home": "Home", "profile": "Profile", - "username": "Username" + "submissions": "Submissions", + "username": "Username", + "users": "Users" } diff --git a/locales/en/common.json b/locales/en/common.json index 2be9ee3..e4049d3 100644 --- a/locales/en/common.json +++ b/locales/en/common.json @@ -1,7 +1,9 @@ { - "logout": "Logout", + "admin": "Admin", + "checkingCredentials": "Checking Credentials", + "loadingCredentials": "Loading Credentials", "login": "Login", - "register": "Create Account", + "logout": "Logout", "recover": "Lost Password", - "admin": "Admin" + "register": "Create Account" } diff --git a/locales/en/form.json b/locales/en/form.json index 4adda50..baeac1c 100644 --- a/locales/en/form.json +++ b/locales/en/form.json @@ -1,97 +1,97 @@ { + "baseData": { + "isLive": "Is Live", + "language": "Language", + "showFooter": "Show Footer", + "title": "Title" + }, + "baseDataTab": "Base Data", "building": "Building Form", - "submitted": "Thank you for your submission!", - "restart": "Restart Form", + "confirmDelete": "Are you sure delete this form with all submissions?", + "create": "Create new form", + "createNow": "Save", + "created": "Form Created", + "creationError": "Could not create form", + "deleteError": "could not delete form", + "deleteNow": "Delete Now!", + "deleted": "Form deleted", + "design": { + "answerColor": "Answer Color", + "backgroundColor": "Background Color", + "buttonActiveColor": "Button Active Color", + "buttonColor": "Button Color", + "buttonTextColor": "Button Text Color", + "font": "Font", + "questionColor": "Question Color" + }, + "designTab": "Design", + "endPage": { + "action": "Action", + "activeColor": "Active Color", + "addButton": "Add Button", + "bgColor": "Background Color", + "buttons": "Buttons", + "color": "Color", + "continueButtonText": "Continue Button Text", + "paragraph": "Paragraph", + "show": "Show", + "text": "Text", + "title": "Title", + "url": "Url" + }, + "endPageTab": "End Page", "loading": "Loading Form", "mange": "Edit Form \"{{title}}\"", "new": "New Form", - "created": "Form Created", - "creationError": "Could not create form", - "create": "Create new form", - "createNow": "Save", - "baseDataTab": "Base Data", - "selfNotificationsTab": "Self Notifications", - "respondentNotificationsTab": "Respondent Notifications", - "updated": "Form updated", - "updateError": "Could not update form", - "updateNow": "Save", - "designTab": "Design", - "startPageTab": "Start Page", - "endPageTab": "End Page", - "confirmDelete": "Are you sure delete this form with all submissions?", - "deleted": "Form deleted", - "deleteError": "could not delete form", - "deleteNow": "Delete Now!", - "row": { - "isLive": "Live", - "title": "Title", - "admin": "Owner", - "language": "Language", - "created": "Created", - "lastModified": "Last Modified", - "menu": "" - }, - "baseData": { - "isLive": "Is Live", - "title": "Title", - "language": "Language", - "showFooter": "Show Footer" - }, - "design": { - "font": "Font", - "backgroundColor": "Background Color", - "questionColor": "Question Color", - "answerColor": "Answer Color", - "buttonColor": "Button Color", - "buttonActiveColor": "Button Active Color", - "buttonTextColor": "Button Text Color" - }, - "endPage": { - "show": "Show", - "continueButtonText": "Continue Button Text", - "paragraph": "Paragraph", - "title": "Title", - "buttons": "Buttons", - "url": "Url", - "text": "Text", - "action": "Action", - "bgColor": "Background Color", - "activeColor": "Active Color", - "color": "Color", - "removeButton": "Add Button" - }, - "startPage": { - "show": "Show", - "continueButtonText": "Continue Button Text", - "paragraph": "Paragraph", - "title": "Title", - "buttons": "Buttons", - "url": "Url", - "text": "Text", - "action": "Action", - "bgColor": "Background Color", - "activeColor": "Active Color", - "color": "Color", - "addButton": "Add Button" - }, "respondentNotifications": { "enabled": "Enabled", - "subject": "Subject", - "htmlTemplate": "HTML Template", - "htmlTemplateInfo": "You can also use MJML<\/u> to create your email templates", - "toField": "Email Field", - "toFieldInfo": "Field with Email for receipt", "fromEmail": "Sender Email", - "fromEmailInfo": "Make sure your mailserver can send from this email" + "fromEmailInfo": "Make sure your mailserver can send from this email", + "htmlTemplate": "HTML Template", + "htmlTemplateInfo": "You can also use MJML to create your email templates", + "subject": "Subject", + "toField": "Email Field", + "toFieldInfo": "Field with Email for receipt" + }, + "respondentNotificationsTab": "Respondent Notifications", + "restart": "Restart Form", + "row": { + "admin": "Owner", + "created": "Created", + "isLive": "Live", + "language": "Language", + "lastModified": "Last Modified", + "menu": "", + "title": "Title" }, "selfNotifications": { "enabled": "Enabled", - "subject": "Subject", - "htmlTemplate": "HTML Template", - "htmlTemplateInfo": "You can also use MJML<\/strong> to create your email templates", - "toEmail": "Your Email", - "toEmailInfo": "If not set will send to the admin of the form", "fromField": "Sender Email", - "fromFieldInfo": "Field with Email, will set the Reply-To header" - } + "fromFieldInfo": "Field with Email, will set the Reply-To header", + "htmlTemplate": "HTML Template", + "htmlTemplateInfo": "You can also use MJML to create your email templates", + "subject": "Subject", + "toEmail": "Your Email", + "toEmailInfo": "If not set will send to the admin of the form" + }, + "selfNotificationsTab": "Self Notifications", + "startPage": { + "action": "Action", + "activeColor": "Active Color", + "addButton": "Add Button", + "bgColor": "Background Color", + "buttons": "Buttons", + "color": "Color", + "continueButtonText": "Continue Button Text", + "paragraph": "Paragraph", + "show": "Show", + "text": "Text", + "title": "Title", + "url": "Url" + }, + "startPageTab": "Start Page", + "submitted": "Thank you for your submission!", + "updateError": "Could not update form", + "updateNow": "Save", + "updated": "Form updated" } diff --git a/locales/en/language.json b/locales/en/language.json index 1683911..5fb76d5 100644 --- a/locales/en/language.json +++ b/locales/en/language.json @@ -1,7 +1,7 @@ { - "en": "English", - "de": "Deutsch", "cn": "繁體中文", + "de": "Deutsch", + "en": "English", "es": "Español", "fr": "Français", "it": "Italiano" diff --git a/locales/en/login.json b/locales/en/login.json index 7209473..7e1845a 100644 --- a/locales/en/login.json +++ b/locales/en/login.json @@ -1,7 +1,7 @@ { - "welcomeBack": "Welcome back!", "invalidLoginCredentials": "username / password are invalid", - "usernamePlaceholder": "Username", + "loginNow": "Login Now", "passwordPlaceholder": "Password", - "loginNow": "Login Now" + "usernamePlaceholder": "Username", + "welcomeBack": "Welcome back!" } diff --git a/locales/en/profile.json b/locales/en/profile.json index a6e05cf..65be15b 100644 --- a/locales/en/profile.json +++ b/locales/en/profile.json @@ -1,10 +1,10 @@ { - "updated": "Profile updated", + "email": "Email", + "firstName": "First Name", + "language": "Language", + "lastName": "Last Name", "updateError": "Could not update Profile", "updateNow": "Save", - "language": "Language", - "email": "Email", - "username": "Username", - "firstName": "First Name", - "lastName": "Last Name" + "updated": "Profile updated", + "username": "Username" } diff --git a/locales/en/register.json b/locales/en/register.json index 8137e48..8381b4f 100644 --- a/locales/en/register.json +++ b/locales/en/register.json @@ -1,6 +1,6 @@ { - "welcome": "Welcome, please also confirm your email", "credentialsAlreadyInUse": "Some data already in use!", + "gotoLogin": "Have an account? Go to login", "registerNow": "Register Now", - "gotoLogin": "Have an account? Go to login" + "welcome": "Welcome, please also confirm your email" } diff --git a/locales/en/statistic.json b/locales/en/statistic.json index 071e97c..97643c6 100644 --- a/locales/en/statistic.json +++ b/locales/en/statistic.json @@ -1,5 +1,5 @@ { "totalForms": "Total Forms", - "totalUsers": "Total Users", - "totalSubmissions": "Total Submissions" + "totalSubmissions": "Total Submissions", + "totalUsers": "Total Users" } diff --git a/locales/en/submission.json b/locales/en/submission.json index 97241ec..bf7754c 100644 --- a/locales/en/submission.json +++ b/locales/en/submission.json @@ -1,16 +1,16 @@ { - "progress": "Progress", - "created": "Created", - "lastModified": "Last Change", - "submission": "Submission", "add": "Add Submission", + "city": "City", + "country": "Country", + "created": "Created", + "device": { + "name": "Device Name", + "type": "Device Type" + }, "edit": "Edit", "field": "Field", - "value": "Value", - "country": "Country", - "city": "City", - "device": { - "type": "Device Type", - "name": "Device Name" - } + "lastModified": "Last Change", + "progress": "Progress", + "submission": "Submission", + "value": "Value" } diff --git a/locales/en/type.json b/locales/en/type.json index 1d33b89..eca438f 100644 --- a/locales/en/type.json +++ b/locales/en/type.json @@ -1,65 +1,65 @@ { - "deleteNow": "Delete Field", "confirmDelete": "Really remove this field? Check that it is not referenced anywhere!", - "title": "Title", - "description": "Description", - "required": "Required", - "requiredInfo": "If required, default value must be set to enable users to submit form!", "date": { - "name": "Date", "default": "Default Date", + "max": "Max Date", "min": "Min Date", - "max": "Max Date" + "name": "Date" }, + "deleteNow": "Delete Field", + "description": "Description", "dropdown": { - "name": "Dropdown", + "addOption": "Add Option", "default": "Default Value", + "name": "Dropdown", "options": "Options", - "titlePlaceholder": "Title", - "valuePlaceholder": "Value", "removeOption": "Remove", - "addOption": "Add Option" + "titlePlaceholder": "Title", + "valuePlaceholder": "Value" }, "email": { - "name": "Email", - "default": "Default Email" + "default": "Default Email", + "name": "Email" }, "hidden": { - "name": "Hidden", - "default": "Default Value" + "default": "Default Value", + "name": "Hidden" }, "link": { - "name": "URL", - "default": "Default Link" + "default": "Default Link", + "name": "URL" }, "number": { - "name": "Number", - "default": "Default Number" + "default": "Default Number", + "name": "Number" }, "radio": { - "name": "Radio Switch", + "addOption": "Add Option", "default": "Default Value", + "name": "Radio Switch", "options": "Options", - "titlePlaceholder": "Title", - "valuePlaceholder": "Value", "removeOption": "Remove", - "addOption": "Add Option" + "titlePlaceholder": "Title", + "valuePlaceholder": "Value" }, "rating": { - "name": "Rating", + "clearNote": "Click again to remove the default value", "default": "Default Value", - "clearNote": "Click again to remove the default value" + "name": "Rating" + }, + "required": "Required", + "requiredInfo": "If required, default value must be set to enable users to submit form!", + "textarea": { + "default": "Default Value", + "name": "Text Area" }, "textfield": { - "name": "Text Line", - "default": "Default Value" - }, - "textarea": { - "name": "Text Area", - "default": "Default Value" + "default": "Default Value", + "name": "Text Line" }, + "title": "Title", "yes_no": { - "name": "Yes / No", - "default": "Default Value" + "default": "Default Value", + "name": "Yes / No" } } diff --git a/locales/en/user.json b/locales/en/user.json index 6d5e098..1a27cf1 100644 --- a/locales/en/user.json +++ b/locales/en/user.json @@ -1,18 +1,18 @@ { + "baseData": "Base Data", "confirmDelete": "Are you sure delete this user?", - "deleted": "User deleted", "deleteError": "could not delete user", "deleteNow": "Delete Now!", + "deleted": "User deleted", "loading": "Loading User", "mange": "Edit User \"{{email}}\"", "row": { - "roles": "Role", - "email": "Email", "created": "Created", - "menu": "" + "email": "Email", + "menu": "", + "roles": "Role" }, - "updated": "User updated", "updateError": "Could not update user", "updateNow": "Save", - "baseData": "Base Data" + "updated": "User updated" } diff --git a/locales/en/validation.json b/locales/en/validation.json index c922a2f..87a8ccc 100644 --- a/locales/en/validation.json +++ b/locales/en/validation.json @@ -1,15 +1,15 @@ { - "invalidEmail": "Must be a valid email!", - "mandatoryFieldsMissing": "Mandatory fields missing", - "usernameRequired": "Please provide a Username", - "emailRequired": "Please provide an Email", "emailFieldRequired": "Please select an Email Field", - "languageRequired": "Please select a Language", - "valueRequired": "Please provide a Value", + "emailRequired": "Please provide an Email", + "invalidEmail": "Must be a valid email!", "invalidUrl": "Must be a valid URL", - "titleRequired": "Please provide a title", - "templateRequired": "Please provide a template", - "subjectRequired": "Please provide a subject", + "languageRequired": "Please select a Language", + "mandatoryFieldsMissing": "Mandatory fields missing", + "passwordMinLength": "Must be longer than or equal to 5 characters!", "passwordRequired": "Please input your password!", - "passwordMinLength": "Must be longer than or equal to 5 characters!" + "subjectRequired": "Please provide a subject", + "templateRequired": "Please provide a template", + "titleRequired": "Please provide a title", + "usernameRequired": "Please provide a Username", + "valueRequired": "Please provide a Value" } diff --git a/locales/it/admin.json b/locales/it/admin.json new file mode 100644 index 0000000..2251b50 --- /dev/null +++ b/locales/it/admin.json @@ -0,0 +1,8 @@ +{ + "forms": "Moduli", + "home": "casa", + "profile": "Profilo", + "submissions": "proposte", + "username": "nome utente", + "users": "Utenti" +} diff --git a/locales/it/common.json b/locales/it/common.json new file mode 100644 index 0000000..66faef8 --- /dev/null +++ b/locales/it/common.json @@ -0,0 +1,9 @@ +{ + "admin": "Admin", + "checkingCredentials": "Verifica delle credenziali", + "loadingCredentials": "Caricamento delle credenziali", + "login": "Entra", + "logout": "Logout", + "recover": "Password dimenticata", + "register": "Crea account" +} diff --git a/locales/it/form.json b/locales/it/form.json new file mode 100644 index 0000000..baeac1c --- /dev/null +++ b/locales/it/form.json @@ -0,0 +1,97 @@ +{ + "baseData": { + "isLive": "Is Live", + "language": "Language", + "showFooter": "Show Footer", + "title": "Title" + }, + "baseDataTab": "Base Data", + "building": "Building Form", + "confirmDelete": "Are you sure delete this form with all submissions?", + "create": "Create new form", + "createNow": "Save", + "created": "Form Created", + "creationError": "Could not create form", + "deleteError": "could not delete form", + "deleteNow": "Delete Now!", + "deleted": "Form deleted", + "design": { + "answerColor": "Answer Color", + "backgroundColor": "Background Color", + "buttonActiveColor": "Button Active Color", + "buttonColor": "Button Color", + "buttonTextColor": "Button Text Color", + "font": "Font", + "questionColor": "Question Color" + }, + "designTab": "Design", + "endPage": { + "action": "Action", + "activeColor": "Active Color", + "addButton": "Add Button", + "bgColor": "Background Color", + "buttons": "Buttons", + "color": "Color", + "continueButtonText": "Continue Button Text", + "paragraph": "Paragraph", + "show": "Show", + "text": "Text", + "title": "Title", + "url": "Url" + }, + "endPageTab": "End Page", + "loading": "Loading Form", + "mange": "Edit Form \"{{title}}\"", + "new": "New Form", + "respondentNotifications": { + "enabled": "Enabled", + "fromEmail": "Sender Email", + "fromEmailInfo": "Make sure your mailserver can send from this email", + "htmlTemplate": "HTML Template", + "htmlTemplateInfo": "You can also use MJML to create your email templates", + "subject": "Subject", + "toField": "Email Field", + "toFieldInfo": "Field with Email for receipt" + }, + "respondentNotificationsTab": "Respondent Notifications", + "restart": "Restart Form", + "row": { + "admin": "Owner", + "created": "Created", + "isLive": "Live", + "language": "Language", + "lastModified": "Last Modified", + "menu": "", + "title": "Title" + }, + "selfNotifications": { + "enabled": "Enabled", + "fromField": "Sender Email", + "fromFieldInfo": "Field with Email, will set the Reply-To header", + "htmlTemplate": "HTML Template", + "htmlTemplateInfo": "You can also use MJML to create your email templates", + "subject": "Subject", + "toEmail": "Your Email", + "toEmailInfo": "If not set will send to the admin of the form" + }, + "selfNotificationsTab": "Self Notifications", + "startPage": { + "action": "Action", + "activeColor": "Active Color", + "addButton": "Add Button", + "bgColor": "Background Color", + "buttons": "Buttons", + "color": "Color", + "continueButtonText": "Continue Button Text", + "paragraph": "Paragraph", + "show": "Show", + "text": "Text", + "title": "Title", + "url": "Url" + }, + "startPageTab": "Start Page", + "submitted": "Thank you for your submission!", + "updateError": "Could not update form", + "updateNow": "Save", + "updated": "Form updated" +} diff --git a/locales/it/index.ts b/locales/it/index.ts index 2cd66df..28995ba 100644 --- a/locales/it/index.ts +++ b/locales/it/index.ts @@ -1 +1,27 @@ -export const it = {} +import admin from './admin.json' +import common from './common.json' +import form from './form.json' +import language from './language.json' +import login from './login.json' +import profile from './profile.json' +import register from './register.json' +import statistic from './statistic.json' +import submission from './submission.json' +import type from './type.json' +import user from './user.json' +import validation from './validation.json' + +export const it = { + admin, + common, + form, + language, + login, + profile, + register, + statistic, + submission, + type, + user, + validation, +} diff --git a/locales/it/language.json b/locales/it/language.json new file mode 100644 index 0000000..5fb76d5 --- /dev/null +++ b/locales/it/language.json @@ -0,0 +1,8 @@ +{ + "cn": "繁體中文", + "de": "Deutsch", + "en": "English", + "es": "Español", + "fr": "Français", + "it": "Italiano" +} diff --git a/locales/it/login.json b/locales/it/login.json new file mode 100644 index 0000000..7e1845a --- /dev/null +++ b/locales/it/login.json @@ -0,0 +1,7 @@ +{ + "invalidLoginCredentials": "username / password are invalid", + "loginNow": "Login Now", + "passwordPlaceholder": "Password", + "usernamePlaceholder": "Username", + "welcomeBack": "Welcome back!" +} diff --git a/locales/it/profile.json b/locales/it/profile.json new file mode 100644 index 0000000..65be15b --- /dev/null +++ b/locales/it/profile.json @@ -0,0 +1,10 @@ +{ + "email": "Email", + "firstName": "First Name", + "language": "Language", + "lastName": "Last Name", + "updateError": "Could not update Profile", + "updateNow": "Save", + "updated": "Profile updated", + "username": "Username" +} diff --git a/locales/it/register.json b/locales/it/register.json new file mode 100644 index 0000000..8381b4f --- /dev/null +++ b/locales/it/register.json @@ -0,0 +1,6 @@ +{ + "credentialsAlreadyInUse": "Some data already in use!", + "gotoLogin": "Have an account? Go to login", + "registerNow": "Register Now", + "welcome": "Welcome, please also confirm your email" +} diff --git a/locales/it/statistic.json b/locales/it/statistic.json new file mode 100644 index 0000000..97643c6 --- /dev/null +++ b/locales/it/statistic.json @@ -0,0 +1,5 @@ +{ + "totalForms": "Total Forms", + "totalSubmissions": "Total Submissions", + "totalUsers": "Total Users" +} diff --git a/locales/it/submission.json b/locales/it/submission.json new file mode 100644 index 0000000..bf7754c --- /dev/null +++ b/locales/it/submission.json @@ -0,0 +1,16 @@ +{ + "add": "Add Submission", + "city": "City", + "country": "Country", + "created": "Created", + "device": { + "name": "Device Name", + "type": "Device Type" + }, + "edit": "Edit", + "field": "Field", + "lastModified": "Last Change", + "progress": "Progress", + "submission": "Submission", + "value": "Value" +} diff --git a/locales/it/type.json b/locales/it/type.json new file mode 100644 index 0000000..eca438f --- /dev/null +++ b/locales/it/type.json @@ -0,0 +1,65 @@ +{ + "confirmDelete": "Really remove this field? Check that it is not referenced anywhere!", + "date": { + "default": "Default Date", + "max": "Max Date", + "min": "Min Date", + "name": "Date" + }, + "deleteNow": "Delete Field", + "description": "Description", + "dropdown": { + "addOption": "Add Option", + "default": "Default Value", + "name": "Dropdown", + "options": "Options", + "removeOption": "Remove", + "titlePlaceholder": "Title", + "valuePlaceholder": "Value" + }, + "email": { + "default": "Default Email", + "name": "Email" + }, + "hidden": { + "default": "Default Value", + "name": "Hidden" + }, + "link": { + "default": "Default Link", + "name": "URL" + }, + "number": { + "default": "Default Number", + "name": "Number" + }, + "radio": { + "addOption": "Add Option", + "default": "Default Value", + "name": "Radio Switch", + "options": "Options", + "removeOption": "Remove", + "titlePlaceholder": "Title", + "valuePlaceholder": "Value" + }, + "rating": { + "clearNote": "Click again to remove the default value", + "default": "Default Value", + "name": "Rating" + }, + "required": "Required", + "requiredInfo": "If required, default value must be set to enable users to submit form!", + "textarea": { + "default": "Default Value", + "name": "Text Area" + }, + "textfield": { + "default": "Default Value", + "name": "Text Line" + }, + "title": "Title", + "yes_no": { + "default": "Default Value", + "name": "Yes / No" + } +} diff --git a/locales/it/user.json b/locales/it/user.json new file mode 100644 index 0000000..1a27cf1 --- /dev/null +++ b/locales/it/user.json @@ -0,0 +1,18 @@ +{ + "baseData": "Base Data", + "confirmDelete": "Are you sure delete this user?", + "deleteError": "could not delete user", + "deleteNow": "Delete Now!", + "deleted": "User deleted", + "loading": "Loading User", + "mange": "Edit User \"{{email}}\"", + "row": { + "created": "Created", + "email": "Email", + "menu": "", + "roles": "Role" + }, + "updateError": "Could not update user", + "updateNow": "Save", + "updated": "User updated" +} diff --git a/locales/it/validation.json b/locales/it/validation.json new file mode 100644 index 0000000..87a8ccc --- /dev/null +++ b/locales/it/validation.json @@ -0,0 +1,15 @@ +{ + "emailFieldRequired": "Please select an Email Field", + "emailRequired": "Please provide an Email", + "invalidEmail": "Must be a valid email!", + "invalidUrl": "Must be a valid URL", + "languageRequired": "Please select a Language", + "mandatoryFieldsMissing": "Mandatory fields missing", + "passwordMinLength": "Must be longer than or equal to 5 characters!", + "passwordRequired": "Please input your password!", + "subjectRequired": "Please provide a subject", + "templateRequired": "Please provide a template", + "titleRequired": "Please provide a title", + "usernameRequired": "Please provide a Username", + "valueRequired": "Please provide a Value" +} diff --git a/locales/missing.ts b/locales/missing.ts new file mode 100644 index 0000000..b46af57 --- /dev/null +++ b/locales/missing.ts @@ -0,0 +1,78 @@ +const fs = require('fs'); +const glob = require('glob'); +const { program } = require('commander'); +const merge = require('lodash.merge'); +const dirs: string[] = [] + +program.version('1.0.0'); +program + .arguments('') + .action((limit) => { + dirs.push( + ...limit + .split(',') + .map(l => `locales/${l}/`) + ) + }) + .option('-l, --limit ', 'check only given languages') + .parse(process.argv); + +let all = {} + +glob.sync('locales/**/*.json').forEach(file => { + try { + const original = JSON.parse(fs.readFileSync(file)) + + all = merge( + all, + { + [file.replace(/^.*\/([a-z]+)\.json$/, '$1')]: original + } + ) + } catch (e) { + console.error('could not process file', file, e) + } +}) + +const compare = (original, compareTo, path, file) => { + const oKeys = Object.keys(original) + const aKeys = Object.keys(compareTo) + + const missing = aKeys.filter(k => !oKeys.includes(k)) + + missing.forEach(k => { + console.log(`MISSING ${file} > ${[...path, k].join('.')}`) + }) + + oKeys.forEach(k => { + if (typeof original[k] === 'object') { + compare(original[k], compareTo[k], [...path, k], file) + } + }) +} + +dirs.forEach(dir => { + const files: string[] = glob.sync(`${dir}*.json`) + + const existingFiles = files.map(file => file.replace(/^.*\/([a-z]+)\.json$/, '$1')) + Object + .keys(all) + .filter(file => !existingFiles.includes(file)) + .forEach(file => { + console.log(`MISSING ${dir}${file}.json`) + }) + + files.forEach(file => { + try { + compare( + JSON.parse(fs.readFileSync(file)), + all[file.replace(/^.*\/([a-z]+)\.json$/, '$1')], + [], + file + ) + } catch (e) { + console.error('could not process file', file, e) + } + }) +}) + diff --git a/locales/sort.ts b/locales/sort.ts new file mode 100644 index 0000000..3f5c332 --- /dev/null +++ b/locales/sort.ts @@ -0,0 +1,52 @@ +const fs = require('fs'); +const glob = require('glob'); +const { program } = require('commander'); + +program.version('1.0.0'); +program + .option('-f, --force', 'force write to existing files') + +program.parse(process.argv); + +const sort = obj => { + if (typeof obj !== 'object') { + return obj + } + + const result = {} + + Object + .keys(obj) + .sort() + .map(key => { + result[key] = sort(obj[key]) + }) + + return result +} + +glob.sync('locales/*/').forEach(dir => { + const files: string[] = glob.sync(`${dir}*.json`) + + files.forEach(file => { + try { + const raw = fs.readFileSync(file) + const original = JSON.parse(raw) + const sorted = sort(original) + const next = JSON.stringify(sorted, null, 2) + "\n" + + if (raw != next) { + if (!program.force) { + console.log('changes found, but skipped', file) + return + } + + console.log('updated', file) + fs.writeFileSync(file, next) + } + } catch (e) { + console.error('could not process file', file, e) + } + }) +}) + diff --git a/package.json b/package.json index 100e596..c74daed 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "build": "next build", "export": "cross-env SPA=1 next build && next export", "start": "next start -p $PORT", - "server": "node server.js" + "translation:sort": "cross-env TS_NODE_TRANSPILE_ONLY=true ts-node-script locales/sort.ts", + "translation:missing": "cross-env TS_NODE_TRANSPILE_ONLY=true ts-node locales/missing.ts" }, "dependencies": { "@ant-design/icons": "^4.1.0", @@ -42,6 +43,10 @@ "devDependencies": { "@types/node": "^14.0.1", "@types/react": "^16.9.35", + "commander": "^5.1.0", + "glob": "^7.1.6", + "lodash.merge": "^4.6.2", + "ts-node": "^8.10.2", "typescript": "^3.9.2" } } diff --git a/pages/admin/index.tsx b/pages/admin/index.tsx index 33902df..bf759e2 100644 --- a/pages/admin/index.tsx +++ b/pages/admin/index.tsx @@ -23,15 +23,15 @@ const Index: NextPage = () => { > - + - + - + diff --git a/pages/index.tsx b/pages/index.tsx index 5fc703b..58346c4 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -4,12 +4,14 @@ import {NextPage} from 'next' import getConfig from 'next/config' import {useRouter} from 'next/router' import React, {useEffect} from 'react' +import {useTranslation} from 'react-i18next' import {LoadingPage} from '../components/loading.page' const { publicRuntimeConfig } = getConfig() const Index: NextPage = () => { const router = useRouter() + const { t } = useTranslation() useEffect(() => { if (router.pathname !== window.location.pathname) { @@ -32,7 +34,7 @@ const Index: NextPage = () => { if (publicRuntimeConfig.spa || (process.browser && router.pathname !== window.location.pathname)) { return ( - + ) } diff --git a/yarn.lock b/yarn.lock index 7817595..20bbf0c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1634,6 +1634,11 @@ aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -2264,6 +2269,11 @@ commander@^2.20.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -2722,6 +2732,11 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -3241,7 +3256,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.1.3, glob@^7.1.4: +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -3905,6 +3920,11 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -3949,6 +3969,11 @@ make-dir@^3.0.2: dependencies: semver "^6.0.0" +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -5987,7 +6012,7 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@~0.5.12: +source-map-support@^0.5.17, source-map-support@~0.5.12: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -6427,6 +6452,17 @@ ts-invariant@^0.4.0, ts-invariant@^0.4.4: dependencies: tslib "^1.9.3" +ts-node@^8.10.2: + version "8.10.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" + integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + ts-pnp@^1.1.6: version "1.2.0" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" @@ -6767,6 +6803,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + zen-observable-ts@^0.8.21: version "0.8.21" resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz#85d0031fbbde1eba3cd07d3ba90da241215f421d"