diff --git a/client/src/components/AppFooter.vue b/client/src/components/AppFooter.vue index d869156a..96c68c37 100644 --- a/client/src/components/AppFooter.vue +++ b/client/src/components/AppFooter.vue @@ -1,7 +1,14 @@ diff --git a/client/src/i18n.ts b/client/src/i18n.ts index c8a4d0c5..1bd3880f 100644 --- a/client/src/i18n.ts +++ b/client/src/i18n.ts @@ -3,14 +3,15 @@ import { createI18n } from "vue-i18n"; // https://vue-i18n.intlify.dev/guide/advanced/lazy.html export const SUPPORT_LOCALES = ["de", "fr", "it"]; +let i18n: any = null; export function setupI18n(options = { locale: "de", legacy: false }) { - const i18n = createI18n(options); - setI18nLanguage(i18n, options.locale); + i18n = createI18n(options); + setI18nLanguage(options.locale); return i18n; } -export function setI18nLanguage(i18n: any, locale: string) { +export function setI18nLanguage(locale: string) { if (i18n.mode === "legacy") { i18n.global.locale = locale; } else { @@ -26,7 +27,7 @@ export function setI18nLanguage(i18n: any, locale: string) { document.querySelector("html")?.setAttribute("lang", locale); } -export async function loadLocaleMessages(i18n: any, locale: any) { +export async function loadLocaleMessages(locale: any) { // load locale messages with dynamic import const messages = await import( /* webpackChunkName: "locale-[request]" */ `./locales/${locale}.json` diff --git a/client/src/locales/fr.json b/client/src/locales/fr.json new file mode 100644 index 00000000..0b590e24 --- /dev/null +++ b/client/src/locales/fr.json @@ -0,0 +1,159 @@ +{ + "general": { + "nextStep": "Prochaine étape", + "start": "Commencer", + "backToLearningPath": "zurück zum Lernpfad", + "backToCircle": "zurück zum Circle", + "next": "Weiter", + "back": "zurück", + "backCapitalized": "@.capitalize:general.back", + "save": "Speichern", + "learningUnit": "Lerneinheit", + "learningPath": "Lernpfad", + "learningSequence": "Lernsequenz", + "show": "Anschauen", + "circles": "Circles", + "transferTask": "Transferauftrag | Transferaufträge", + "feedback": "Feedback | Feedbacks", + "exam": "Prüfung | Prüfungen", + "examResult": "Prüfungsresultat | Prüfungsresultate", + "certificate": "Zertifikat | Zertifikate", + "notification": "Benachrichtigung | Benachrichtigungen", + "profileLink": "Profil anzeigen", + "shop": "Shop", + "yes": "Ja", + "no": "Nein" + }, + "mainNavigation": { + "logout": "Abmelden", + "settings": "Kontoeinstellungen" + }, + "dashboard": { + "welcome": "Willkommen, {name}" + }, + "learningPathPage": { + "welcomeBack": "Willkommen zurück, {name}", + "showListView": "Listenansicht anzeigen", + "nextStep": "Nächster Schritt" + }, + "circlePage": { + "duration": "Dauer", + "circleContentBoxTitle": "Das lernst du in diesem Circle.", + "gotQuestions": "Hast du Fragen?", + "contactExpertButton": "Fachexpertin kontaktieren", + "contactExpertDescription": "Tausche dich mit der Fachexpertin für den Circle {circleName} aus.", + "learnMore": "Erfahre mehr dazu", + "documents": { + "title": "Unterlagen", + "expertDescription": "Stelle deinen Lernenden zusätzliche Inhalte zur Verfügung.", + "userDescription": "Hier findest du die Unterlagen, die dir die Fachexpertin zur Verfügung gestellt hat.", + "action": "Unterlagen hochladen", + "modalAction": "Datei auswählen", + "fileLabel": "Datei", + "modalFileName": "Name", + "modalNameInformation": "Max. 70 Zeichen", + "chooseSequence": "Wähle eine Lernsequenz aus", + "selectFile": "Bitte wähle eine Datei aus", + "chooseName": "Bitte wähle einen Namen", + "chooseLearningSequence": "Bitte wähle eine Lernsequenz aus", + "uploadErrorMessage": "Beim Hochladen ist ein Fehler aufgetreten. Bitte versuche es erneut.", + "maxFileSize": "Maximale Dateigrösse: 20 MB" + } + }, + "learningContent": { + "completeAndContinue": "Als erledigt markieren" + }, + "selfEvaluation": { + "selfEvaluation": "Selbsteinschätzung", + "title": "@:selfEvaluation.selfEvaluation {title}", + "steps": "Schritt {current} von {max}", + "instruction": [ + "Überprüfe, ob du in der Lernheinheit", + "alles verstanden hast.", + "Lies die folgende Aussage und bewerte sie:" + ], + "yes": "Ja, ich kann das", + "no": "Das muss ich nochmals anschauen", + "progressText": "Schau dein Fortschritt in deinem KompetenzNavi:", + "progressLink": "KompetenzNavi öffnen", + "selfEvaluationYes": "@:selfEvaluation: Ich kann das.", + "selfEvaluationNo": "@:selfEvaluation: Muss ich nochmals anschauen." + }, + "competences": { + "competences": "Kompetenzen", + "title": "KompetenzNavi", + "lastImprovements": "Letzte verbesserte Kompetenzen", + "showAll": "Alle anschauen", + "assessment": "Einschätzungen", + "notAssessed": "Nicht eingeschätzt", + "assessAgain": "Sich nochmals einschätzen" + }, + "mediaLibrary": { + "title": "Mediathek", + "learningMedia": { + "titel": "Lernmedien", + "description": "Finde eine vollständige Liste der Bücher und anderen Medien, auf die im Kurs verwiesen wird." + }, + "handlungsfelder": { + "title": "Handlungsfeld | Handlungsfelder", + "description": "Finde alle Ressourcen der Handlungsfelder wie Lernmedien, Links und andere nützliche Informationen." + } + }, + "footer": { + "dataProtection": "Datenschutzbestimmungen", + "imprint": "Impressum", + "contact": "Kontakt", + "faq": "FAQ" + }, + "cockpit": { + "title": "Cockpit", + "tasksDone": "Erledigte Transferaufträge von Teilnehmer.", + "feedbacksDone": "Abgeschickte Feedbacks von Teilnehmer.", + "examsDone": "Abgelegte Prüfungen von Teilnehmer.", + "progress": "Fortschritt", + "profileLink": "Profil anzeigen" + }, + "messages": { + "sendMessage": "Nachricht schreiben" + }, + "feedback": { + "intro": "{name}, dein/e Trainer/-in, bittet dich, ihm/ihr Feedback zu geben. Das ist freiwillig, würde aber ihm/ihr helfen, deine Lernerlebniss zu verbessern.", + "areYouSatisfied": "Wie zufrieden bist du?", + "recommendLabel": "Würden Sie den Kurs weiterempfehlen?", + "satisfactionLabel": "Zufriedenheit insgesamt", + "goalAttainmentLabel": "Zielerreichung insgesamt", + "proficiencyLabel": "Wie beurteilen Sie Ihre Sicherheit bezüglichen den Themen nach dem Kurs?", + "receivedMaterialsLabel": "Haben Sie Vorbereitungsunterlagen (z.B. eLearning) erhalten?", + "materialsRatingLabel": "Falls ja: Wie beurteilen Sie die Vorbereitungsunterlagen (z.B. eLearning)?", + "instructorCompetenceLabel": "Der Kursleiter war themenstark, fachkompetent.", + "instructorRespectLabel": "Fragen und Anregungen der Kursteilnehmenden wurden ernst genommen und aufgegriffen.", + "instructorOpenFeedbackLabel": "Was ich dem Kursleiter sonst noch sagen wollte:", + "courseNegativeFeedbackLabel": "Wo sehen Sie Verbesserungspotenzial?", + "coursePositiveFeedbackLabel": "Was hat Ihnen besonders gut gefallen?", + "completionTitle": "Schicke dein Feedback an {name}", + "completionDescription": "Dein Feedback ist anonym. Dein Vor- und Nachname werden bei deiner Trainer/-in nicht angezeigt.", + "sendFeedback": "Feedback abschicken", + "feedbackSent": "Dein Feedback wurde abgeschickt", + "circleFeedback": "Feedback zum Circle", + "showDetails": "Details anzeigen", + "sentByUsers": "Von {count} Teilnehmern ausgefüllt", + "feedbackPageTitle": "Feedback zum Lehrgang", + "feedbackPageInfo": "Teilnehmer haben das Feedback ausgefüllt", + "questionTitle": "Frage", + "veryUnhappy": "Sehr unzufrieden", + "unhappy": "Unzufrieden", + "happy": "Zufrieden", + "veryHappy": "Sehr zufrieden", + "average": "Durchschnitt", + "answers": "Antworten", + "noFeedbacks": "Es wurden noch keine Feedbacks abgegeben" + }, + "constants": { + "yes": "Ja", + "no": "Nein", + "verySatisfied": "sehr zufrieden", + "satisfied": "zufrieden", + "unsatisfied": "unzufrieden", + "veryUnsatisfied": "sehr unzufrieden" + } +} diff --git a/client/src/main.ts b/client/src/main.ts index 8f3d96a1..45bf3427 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -39,7 +39,7 @@ Sentry.init({ }); // todo: define lang setup -loadLocaleMessages(i18n, "de").then(() => { +loadLocaleMessages("de").then(() => { app.use(router); const pinia = createPinia();