Add internationalization support with English and Dutch translations

- Integrated i18next for language detection and translation support.
- Added English and Dutch JSON translation files for various app sections.
- Updated TweaksPanel and Workspace components to use translated strings.
- Imported i18n configuration in main entry file.
This commit is contained in:
LaurensBartelds committed 2026-04-26 21:19:47 +02:00
1 parent c64cdcd9e3
commit 6277826472
19 files changed
+1193 -369

No files matched your search

+369
View File
@@ -0,0 +1,369 @@
{
"common": {
"appName": "BrainWave",
"appTagline": "practice exam platform",
"cancel": "Cancel",
"confirm": "Confirm",
"close": "Close",
"save": "Save",
"delete": "Delete",
"edit": "Edit",
"back": "Back",
"backToHome": "Back to home",
"loading": "Loading…",
"error": "Error",
"success": "Success",
"yes": "Yes",
"no": "No",
"pts": "pts",
"pt": "pt",
"questions": "questions",
"question": "question"
},
"landing": {
"eyebrow": "BrainWave · practice exam platform",
"title": "Upload an exam. ",
"titleEmphasis": "Practice anything.",
"subtitle": "Drop in a JSON file to run a practice exam — math with full LaTeX, language translation, multiple choice, matching, ordering, essays, and more. Progress saves automatically.",
"dropzoneTitle": "Drop your exam JSON here",
"dropzoneSub": "or click to browse · max 5 MB",
"downloadInstructions": "Download Instructions — How to create your own exam JSON",
"downloadInstructionsIcon": "↓",
"supportedTypes": "Supported types",
"supportedTypesList": "multiple-choice · multiple-select · short-answer · translation · math-input (LaTeX) · essay · match · order",
"trySample": "Try a sample",
"resumeTitle": "Resume in-progress exam",
"resumeProgress": "{{answered}}/{{total}} answered",
"resumeButton": "Resume →",
"pastAttempts": "Past attempts",
"clearHistory": "Clear history",
"dateTimeFormat": "{{date}} · {{correct}}/{{graded}} correct",
"review": "Review",
"loadError": "Could not load: {{message}}",
"loadSampleError": "Could not load sample: {{message}}",
"clearHistoryConfirm": "Clear all past attempts?"
},
"auth": {
"signIn": "Sign In",
"signOut": "Sign Out",
"register": "Register",
"welcomeBack": "Welcome back",
"createAccount": "Create account",
"signInSubtitle": "Sign in to access your saved exams and results",
"registerSubtitle": "Create an account to save your progress",
"email": "Email",
"password": "Password",
"confirmPassword": "Confirm Password",
"displayName": "Display Name",
"forgotPassword": "Forgot your password?",
"signingIn": "Signing in…",
"creatingAccount": "Creating account…",
"loginFailed": "Login failed",
"registrationFailed": "Registration failed",
"passwordsDoNotMatch": "Passwords do not match",
"myWorkspace": "My Workspace",
"adminDashboard": "Admin Dashboard",
"userMenu": "User menu",
"resetPassword": "Reset Password",
"resetPasswordDesc": "Enter your email address and we'll send you a link to reset your password.",
"checkYourEmail": "Check Your Email",
"setNewPassword": "Set New Password",
"enterNewPassword": "Enter your new password below.",
"newPassword": "New Password",
"resetting": "Resetting…",
"passwordUpdated": "Password Updated",
"passwordUpdatedDesc": "Your password has been reset successfully. You can now sign in with your new password.",
"requestFailed": "Request failed",
"passwordResetFailed": "Password reset failed",
"sendResetLink": "Send Reset Link",
"sending": "Sending…",
"backToSignIn": "Back to sign in"
},
"exam": {
"submitExam": "Submit exam",
"exitToHome": "Exit to home",
"questionsLabel": "Questions",
"progressLabel": "Progress",
"progressText": "{{answered}} of {{total}} answered",
"questionHeader": "Question {{current}} / {{total}}",
"correct": "Correct",
"notQuite": "Not quite",
"answerLabel": "Answer:",
"previous": "← Previous",
"flagged": "⚑ Flagged",
"flagForReview": "⚐ Flag for review",
"checkAnswer": "Check answer",
"next": "Next →",
"elapsed": "Elapsed",
"remaining": "Remaining",
"pointsPossible": "Points possible",
"mode": "Mode",
"immediateFeedback": "Immediate feedback",
"gradeAtEnd": "Grade at end",
"notes": "Notes",
"notesPlaceholder": "Add short notes while you work…",
"author": "Author",
"navigateHint": "navigate",
"flagHint": "flag",
"selectHint": "select",
"exit": "Exit",
"untimed": "Untimed"
},
"results": {
"reviewing": "Reviewing past attempt",
"examComplete": "Exam complete",
"scored": "You scored ",
"abovePassing": "Above the {{passing}}% passing mark.",
"belowPassing": "Below the {{passing}}% passing mark. Keep practicing.",
"points": "Points",
"correct": "Correct",
"time": "Time",
"byCategory": "By category",
"uncategorized": "Uncategorized",
"review": "Review",
"explanation": "Explanation",
"rubric": "Rubric (self-grade)",
"retakeExam": "Retake exam",
"backToHome": "Back to home"
},
"tweaks": {
"title": "Tweaks",
"theme": "Theme",
"light": "Light",
"dark": "Dark",
"textSize": "Text size",
"small": "S",
"medium": "M",
"large": "L",
"feedback": "Feedback",
"auto": "Auto",
"immediate": "Immediate",
"end": "End"
},
"workspace": {
"myWorkspace": "My Workspace",
"myExams": "My Exams",
"results": "Results",
"settings": "Settings",
"newExam": "New Exam",
"noSavedExams": "No saved exams yet",
"noSavedExamsDesc": "Upload an exam from the home page, or create a new one to get started.",
"createFirstExam": "Create Your First Exam",
"noAttempts": "No attempts yet",
"noAttemptsDesc": "Take an exam to see your results here.",
"attempts": "attempt",
"attemptsPlural": "attempts",
"updated": "Updated",
"profile": "Profile",
"security": "Security",
"displayNameLabel": "Display Name",
"displayNameDesc": "Your name shown throughout the app",
"emailLabel": "Email",
"emailDesc": "Your email address",
"saveProfile": "Save Profile",
"saving": "Saving…",
"displayNameUpdated": "Display name updated",
"displayNameRequired": "Display name is required (max 100 characters)",
"currentPassword": "Current Password",
"newPassword": "New Password",
"newPasswordDesc": "Minimum 8 characters",
"confirmNewPassword": "Confirm New Password",
"changePassword": "Change Password",
"changing": "Changing…",
"passwordChanged": "Password changed successfully",
"passwordMinLength": "New password must be at least 8 characters",
"passwordsDoNotMatch": "Passwords do not match"
},
"admin": {
"administration": "Administration",
"dashboard": "Dashboard",
"backToSite": "← Back to site",
"overview": "Overview",
"settings": "Settings",
"users": "Users",
"totalUsers": "Total Users",
"savedExams": "Saved Exams",
"examsTaken": "Exams Taken",
"avgScore": "Avg. Score",
"recentActivity": "Recent Activity",
"noRecentActivity": "No recent activity yet",
"general": "General",
"siteName": "Site Name",
"siteNameDesc": "The name displayed throughout the application",
"maxUpload": "Max Upload Size (MB)",
"maxUploadDesc": "Maximum file size for exam JSON uploads",
"defaultTheme": "Default Theme",
"defaultThemeDesc": "Default theme for new visitors",
"accessControl": "Access Control",
"allowGuestMode": "Allow Guest Mode",
"allowGuestModeDesc": "Let unauthenticated users take exams without signing in",
"registrationEnabled": "Registration Enabled",
"registrationEnabledDesc": "Allow new users to create accounts",
"emailSmtp": "Email / SMTP",
"appUrl": "App URL",
"appUrlDesc": "Base URL used in email links (e.g. https://brainwave.example.com)",
"smtpHost": "SMTP Host",
"smtpHostDesc": "Hostname of your SMTP server",
"smtpPort": "SMTP Port",
"smtpPortDesc": "Common ports: 587 (STARTTLS), 465 (SSL), 25 (plain)",
"username": "Username",
"usernameDesc": "SMTP authentication username",
"password": "Password",
"passwordDesc": "SMTP authentication password",
"fromAddress": "From Address",
"fromAddressDesc": "The sender name and address shown in emails",
"tlsMode": "TLS Mode",
"tlsModeDesc": "Auto detects from port (465→SSL). Use explicit override if needed.",
"auto": "Auto",
"forceTls": "Force TLS",
"off": "Off",
"sendTestEmail": "Send Test Email",
"sendTestEmailDesc": "Sends a test email using the settings above (uses draft values, no need to save first)",
"sendTest": "Send Test",
"sending": "Sending…",
"maintenance": "Maintenance",
"maintenanceMode": "Maintenance Mode",
"maintenanceModeDesc": "Take the site offline for non-admin users",
"maintenanceMessage": "Maintenance Message",
"maintenanceMessageDesc": "Message displayed to visitors during maintenance",
"discardChanges": "Discard Changes",
"saveSettings": "Save Settings",
"settingsSaved": "Settings saved successfully",
"searchByNameOrEmail": "Search by name or email…",
"search": "Search",
"user": "User",
"role": "Role",
"verified": "Verified",
"exams": "Exams",
"joined": "Joined",
"actions": "Actions",
"noUsersFound": "No users found",
"testEmailSent": "Test email sent successfully! Check your inbox."
},
"editor": {
"back": "← Back",
"examTitlePlaceholder": "Exam title",
"unsavedChanges": "Unsaved changes",
"saving": "Saving…",
"createExam": "Create Exam",
"save": "Save",
"examCreated": "Exam created successfully",
"examSaved": "Exam saved",
"questionsLabel": "Questions",
"addQuestion": "Add Question",
"noQuestions": "No questions yet",
"noQuestionsDesc": "Select a question type from the sidebar to add your first question.",
"questionEditor": "Question Editor",
"prompt": "Prompt",
"promptPlaceholder": "Enter the question prompt…",
"categoryOptional": "Category (optional)",
"categoryPlaceholder": "e.g. Algebra",
"points": "Points",
"explanationOptional": "Explanation (optional)",
"explanationPlaceholder": "Explanation shown after grading…",
"choices": "Choices",
"markAsCorrect": "Mark as correct",
"addChoice": "+ Add Choice",
"remove": "Remove",
"multipleChoice": "Multiple Choice",
"multipleSelect": "Multiple Select",
"shortAnswer": "Short Answer",
"translation": "Translation",
"mathInput": "Math Input",
"essay": "Essay",
"match": "Match",
"order": "Order",
"correctAnswer": "Correct Answer",
"correctAnswerPlaceholder": "Enter the correct answer",
"acceptedForms": "Accepted Forms (optional alternatives)",
"alternativeAnswer": "Alternative answer",
"addAlternative": "+ Add Alternative",
"caseSensitive": "Case sensitive",
"ignorePunctuation": "Ignore punctuation",
"ignoreAccents": "Ignore accents",
"minWords": "Min Words",
"rubricCriteria": "Rubric Criteria",
"criterion": "Criterion",
"addCriterion": "+ Add Criterion",
"leftColumn": "Left Column",
"rightColumn": "Right Column",
"addLeft": "+ Add Left",
"addRight": "+ Add Right",
"correctPairings": "Correct Pairings",
"select": "— Select —",
"items": "Items (drag not implemented, use arrows to reorder)",
"itemPlaceholder": "Item {{index}}",
"correctOrder": "Correct Order",
"correctOrderHint": "The correct order is the order shown above. Reorder items to set the correct sequence.",
"setCurrentOrder": "Set Current Order as Correct",
"examTitleRequired": "Exam title is required",
"atLeastOneQuestion": "Add at least one question",
"sourceLanguage": "Source Language",
"sourceLanguagePlaceholder": "e.g. English",
"targetLanguage": "Target Language",
"targetLanguagePlaceholder": "e.g. Spanish",
"choicesCheckCorrect": "Choices (check correct answers)",
"choicePlaceholder": "Choice {{id}}",
"addItem": "+ Add Item",
"leftItemPlaceholder": "Left item {{index}}",
"rightItemPlaceholder": "Right item {{index}}"
},
"setup": {
"welcome": "Welcome to BrainWave",
"subtitle": "Let's get your instance set up. This only takes a minute.",
"adminAccount": "Admin Account",
"emailSettings": "Email Settings",
"email": "Email",
"displayName": "Display Name",
"password": "Password",
"confirmPassword": "Confirm Password",
"continue": "Continue →",
"smtpHost": "SMTP Host",
"smtpPort": "SMTP Port",
"smtpUsername": "SMTP Username",
"smtpPassword": "SMTP Password",
"fromAddress": "From Address",
"security": "Security",
"appUrl": "App URL",
"back": "← Back",
"completeSetup": "Complete Setup",
"settingUp": "Setting up…",
"setupHint1": "Configure your outgoing email server so BrainWave can send verification and password-reset emails.",
"setupHint2": "You can leave these blank and configure them later in the admin dashboard.",
"autoSsl": "Auto (use SSL on port 465)",
"sslTls": "SSL/TLS",
"noneStarttls": "None / STARTTLS",
"validEmailRequired": "Please enter a valid email address",
"displayNameRequired": "Display name is required",
"passwordMinLength": "Password must be at least 8 characters",
"passwordsDoNotMatch": "Passwords do not match",
"setupFailed": "Setup failed. Please try again."
},
"verify": {
"verifying": "Verifying your email…",
"pleaseWait": "Please wait while we confirm your email address.",
"emailVerified": "Email Verified",
"signIn": "Sign In →",
"verificationFailed": "Verification Failed",
"backToHome": "Back to Home",
"noToken": "No verification token found."
},
"resetPassword": {
"resetPassword": "Reset Password",
"enterEmail": "Enter your email address and we'll send you a link to reset your password.",
"sendResetLink": "Send Reset Link",
"sending": "Sending…",
"backToSignIn": "← Back to sign in",
"checkEmail": "Check Your Email",
"setNewPassword": "Set New Password",
"enterNewPassword": "Enter your new password below.",
"newPassword": "New Password",
"confirmPassword": "Confirm Password",
"resetting": "Resetting…",
"resetPasswordBtn": "Reset Password",
"passwordUpdated": "Password Updated",
"passwordUpdatedDesc": "Your password has been reset successfully. You can now sign in with your new password.",
"requestFailed": "Request failed",
"passwordResetFailed": "Password reset failed"
}
}